2017-06-22 182 views
1

我用的終極版庫角4.我一直挖到index.d.ts爲這個圖書館史詩的工作,和所遇到如下:這是什麼打字稿接口語法是什麼意思?

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

是什麼語法是什麼意思?由於構件沒有名字,我只能猜測整個接口定義了一個函數類型採用兩個參數 - 一個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

是很有用的驗證回調實現某個簽名:

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(() => {});