打字稿:lambda的类型是什么?

时间:2018-04-20 06:07:38

标签: typescript types

在Angular"英雄之旅"教程中,定义了一个返回lambda:

的错误处理程序方法
private handleError<T>(operation = 'operation', result?: T) {

  return (error: any): Observable<T> => {
    this.log(`${operation} failed: ${error.message}`);
    return of(result as T);
};

handleError方法没有返回类型,因此推断出来。如果我们想让它明确,那么返回类型会是什么?我已经尝试过功能(lib.es2015.core.d.ts),但这不起作用。

将lambda本身作为返回类型添加有效,但似乎错了:

  private handleError<T>(operation = 'operation', result?: T): (error: any) => Observable<T> {
          return (error: any): Observable<T> => {
          ...

lambda的正确Typescript类型是什么?在Java中,handleError将返回java.util.function.Function。打字稿中有类似的东西吗?谢谢。

1 个答案:

答案 0 :(得分:2)

在Javascript中,所有函数都是rm -rf $HOME/.npm/x 类型,因此在运行时它们都是相同的类型(与Java不同,它们是不同的类型)。现在,Typescript可以让你区分不同的函数签名,但这只是一个编译时间的区别,在运行时它们都是Function。我们编写此类签名的一般方法是Function

在你的情况下,lambda的签名已在回报中拼写出来,所以当你写作时你就是核心

(paramList) => returnType

如果你发现一遍又一遍地使用相同的函数签名,你可以写一个类型别名,但这只是一个简单的基本相同的东西,一个函数签名:

 private handleError<T>(operation = 'operation', result?: T): (error: any) => Observable<T> {
      return (error) => { // We can let inference work here, the return type will be enforced.
      ...