2017-06-22 174 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(() => {});