我正在Epular与Angular 4中的Redux库一起工作。我一直在挖掘这个库的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 :(得分: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(() => {});