2017-06-22 19 views
1

私は、私はこのライブラリのためindex.d.tsに掘りされており、かつ以下に遭遇している角度4.でReduxのライブラリとの叙事詩で働いています:このTypeScriptインターフェイスの構文は何を意味しますか?

export declare interface Epic<T, S> { 
    (action$: ActionsObservable<T>, store: MiddlewareAPI<S>): Observable<T>; 
} 

この構文は何を意味するのでしょうか?メンバには名前がないので、インターフェイス全体が2つのパラメータ(ActionsObservable<T>MiddlewareAPI<S>)を受け取る関数型を定義し、Observable<T>を返すとしか推測できません。

そうですか?その場合、それはなぜインターフェイスとして定義されていますか?

私は、このインターフェースを別の開発者のテンプレートに従って使用していますが、それが何を意味するのか不思議です。その使用の抽出物は、次のようになります

getStuff(): Epic<IAction, IAppState> { 
    return (action$, store): any => action$ 
    .ofType(actions.SOME_ACTION) 
    .mergeMap((_) => { 
     return this.apiService.get(`some/api/call/`) 
     .map((result) => { 
      return actions.someActionSuccess({data: result}); 
     }); 
    }); 
} 

これはちょっとgetStuff()が実際にこのシグネチャを持つ関数を返しているので、私の理解をサポートしています。しかし、野生の推測よりも堅実なものは素晴らしいでしょう!

+0

うん、 。 – toskv

+0

[私の答え](https://stackoverflow.com/a/44703129/2545680)に不明な点がありますか? –

答えて

1

そうですか?その場合、それはなぜインターフェイスとして定義されていますか?

はい、正しいです。これは、ファンクションタイプEpicのインタフェースです。それらの詳細についてはin the documentationを読むことができます。

それは、コールバックが特定の署名を実装することを検証するのに便利です:タイピングの他の種類と同様の権利だし、あなたがそれをタイプを与え、typesafetyを得ることができるので、インターフェイスとして定義されて

interface MyCB { 
    (a: string, b: string): string; 
} 

// expect a callback of type MyCB that returns a string 
function forEach(cb: MyCB) { 

} 

// TS reports an error since the callback doesn't return a string 
forEach(() => {}); 
関連する問題