这种TypeScript接口语法是什么意思?

时间:2017-06-22 14:27:19

标签: angular typescript redux

我正在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()确实返回了具有此签名的函数。但是一些比疯狂猜测更坚固的东西会很棒!

1 个答案:

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