由于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还不支持这种推理,或者我是否会错过可以检查此代码类型的内容?
答案 0 :(得分:3)
在很多情况下,TypeScript会执行contextual typing,但这不是一个。
将类型注释添加到参数:
class T {
@test
log(n: number) {
}
}
仍然会检查与装饰器相关的类型,即使装饰器不提供上下文类型信息:
class T {
@test
log(n: string) { // ERROR!
}
}