为什么&Type文件可以推断出这个函数的参数类型?

时间:2016-01-06 15:31:58

标签: types typescript

假设我们有这种类型声明:

declare type MethodDecorator = <T>(target: Object, propertyKey: string | symbol, descriptor: TypedPropertyDescriptor<T>) => TypedPropertyDescriptor<T> | void;

如果我们定义一个方法来说明这个类型,为什么&gt; t打字稿可以推断出参数的类型?

const fetchJson: MethodDecorator = (target, propertyKey, descriptor) => {
    ...
}

Typescripts将参数推断为具有any类型。这是为什么?

1 个答案:

答案 0 :(得分:4)

当上下文类型的签名是通用的时,不会发生函数表达式的上下文类型。这是因为它会导致类型参数类型出现&#34;泄漏&#34;这是一个很大的禁忌 - 你永远不应该在外面看到未指定的类型参数T 声明它的声明。

您可以通过将type参数移动到类型而不是在签名上来解决此问题:

type SomeMethodDecorator<T> = (target: Object, propertyKey: string | symbol, descriptor: TypedPropertyDescriptor<T>) => TypedPropertyDescriptor<T> | void;

let x: SomeMethodDecorator<string> = (a, b, c) => {
    // a: Object, etc.
}