2016-05-06 19 views
0

関数の配列を含むオブジェクトを含む配列を入力しようとしています。 TypeScriptがエラーを出しています:TS2339:プロパティ 'push'が型 '{name ?:()=> void)[];に存在しません。 } '。プロパティプッシュが型に存在しません

_observerCallbacksオブジェクトは、次のようになります。これは私のコードは次のようになります

{ 
    main: [function1..., function2...], 
    second: [function1..., function2...] 
} 

export class LoadingTracker { 
    private _observerCallbacks: { name?: {(): void; }[] }[] = []; 

     registerObserverCallback(callback, name): void { 
      if (typeof this._observerCallbacks[name] === 'undefined') this._observerCallbacks[name] = []; 
      this._observerCallbacks[name].push(callback); 
     } 

     notifyObservers(): void { 
      this._observerCallbacks.forEach((callback: {(): void; }): void => { 
       callback(); 
      }); 
     } 
} 

どこが間違っているのか分かりません。

答えて

0

index signatureを使用して調べます。あなたは次のようなことをする意味があると思います。

export class LoadingTracker { 
    private _observerCallbacks: { [name: string]: {(): void; }[] } = {}; 

    registerObserverCallback(callback, name): void { 
     if (typeof this._observerCallbacks[name] === 'undefined') { 
      this._observerCallbacks[name] = []; 
     }  
     this._observerCallbacks[name].push(callback); 
    } 

    notifyObservers(): void { 
     Object.keys(this._observerCallbacks).forEach(name => { 
      this.notifyObserversByName(name); 
     }); 
    } 

    private notifyObserversByName(name: string) { 
     this._observerCallbacks[name].forEach(callback => { 
      callback(); 
     }); 
    } 
} 
+0

完璧に働き、助けてくれてありがとう! –

0

これはちょうどタイプエラーのようです。あなたの_observerCallbacksはこのタイプでなければなりません:

private _obeservableCallbacks: { name: [(): void] } 

文字列を関数のリストにマップする辞書です。

関連する問題