2017-11-04 11 views
0

現在、私はTypeScriptをチェックアウトしようとしています。私の古いJavaScript -Sourceで名前ベースのオブジェクト配列を作成するには?

私はイベントリスナーのためのシンプルなnamebasedアレイ・オブジェクトを持っている:

let _events \t \t = {}; 
 

 
this.addEventListener = function addEventListener(name, callback) { 
 
\t \t if(typeof(_events[name]) == 'undefined') { 
 
\t \t \t _events[name] = []; 
 
\t \t } 
 
\t \t 
 
\t \t _events[name].push(callback); 
 
\t }; 
 
\t 
 
\t this.fireEvent = function fireEvent() { 
 
\t \t let fired \t = false; 
 
\t \t let args \t = new Array(); 
 
\t \t let name \t = arguments[0]; 
 
\t \t 
 
\t \t if(typeof(_events[name]) == 'undefined') { 
 
\t \t \t return; 
 
\t \t } 
 
\t \t 
 
\t \t for(var index = 1; index < arguments.length; index++) { 
 
\t \t \t args.push(arguments[index]); 
 
\t \t } 
 
\t 
 
\t \t _events[name].forEach(function onEvent(event) { 
 
\t \t \t fired = true; 
 
\t \t \t event.apply(this, args); 
 
\t \t }.bind(this)); 
 
\t \t 
 
\t \t return fired; 
 
\t };

私は活字体で同じメソッドを作成できますか?ここで

は、サンプルの結果である:

{ 
    "init": [callback, callback, callback], 
    "otherEvent": [callback, callback] 
} 

答えて

0

あなたはそれを用いた活字体と、最新のES6の機能の一部を実装することができます。たとえば、代わりにあなたがES6地図を使用することができ、キー/値のマップとしてオブジェクト_eventsを使用する:

class EventManager { 

    private _events: Map<string, Array<Function>>; 

    public addEventListener(name: string, callback: Function) { 
     if(this._events.has(name) === false) { 
      this._events.set(name, [callback]); 
     } else { 
      const previosCallbacks = this._events.get(name); 
      previosCallbacks.push(callback); 
      this._events.set(name, previosCallbacks); 
     } 
    } 

    public fireEvent(name: string, ...args: any[]) { 

     let fired = false; 

     if (this._events.has(name) === false) { 
      return; 
     } 

     this._events.get(name).forEach((cb) => { 
      fired = true; 
      cb(...args); 
     }); 

     return fired; 
    } 

} 
+0

私は 'Map'としてエクスポートすると、これらのクラスは、/' ES5'を使用して(コンパイル後に発見されません。 「ES2015」)。私はすでにあなたのようなマップを使用しようとしていました。 –

+0

古いバージョンのnodejsまたはWebブラウザでコードを実行しようとしている場合、Mapは利用できませんが、Shimを使用できます。 corejsのようにhttps://github.com/zloirock/core-js#map –

+0

'Map'が定義されていないためにコンパイルエラーが発生した場合、' 'target": "es5" 'を使う必要があります。 '' lib ':["es6"] '' 'tsconfig.json' –

関連する問題