【发布时间】:2017-06-22 14:27:18
【问题描述】:
我正在使用 Angular 4 中的 Redux 库与 Epics 合作。我一直在研究该库的 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() 确实返回了一个具有此签名的函数。但是比疯狂的猜测更可靠的东西会很棒!
【问题讨论】:
-
是的,没错,它被定义为一个接口,所以你可以给它一个类型并获得类型安全,就像任何其他类型的打字一样。
-
my answer有什么不清楚的地方吗?
标签: angular typescript redux