TypeScript中的方法装饰器是否有任何类型推断?

时间:2017-12-19 13:05:08

标签: typescript types decorator

由于TypedPropertyDescriptor可用于定义方法装饰器,有没有办法让编译器推断出装饰方法的参数类型?

function test(
    target: any,
    propName: string | symbol,
    descriptor: TypedPropertyDescriptor<(x: number) => any>
) {
}

class T {
  @test
  log(n) {  // <-- compiler complains that n has type of implicit any

  }
}

(x: number) => any传递到TypedPropertyDescriptor时,它意味着由test修饰的所有方法都应该是(x: number) => any类型,因此上面的代码应该键入check。

所以TypeScript还不支持这种推理,或者我是否会错过可以检查此代码类型的内容?

1 个答案:

答案 0 :(得分:3)

在很多情况下,TypeScript会执行contextual typing,但这不是一个。

将类型注释添加到参数:

class T {
  @test
  log(n: number) {

  }
}

仍然会检查与装饰器相关的类型,即使装饰器不提供上下文类型信息:

class T {
  @test
  log(n: string) { // ERROR!

  }
}