当一个函数有一个后期绑定的泛型类型时,它调用了什么(它只在函数被调用时确定,而不是在定义时确定)。
在下面的代码示例中显示为
LateT
,与EarlyT
早期绑定的情况形成对比,其中函数引用本身的类型已经具有类型化约束(并且当函数调用时它不是后期绑定评估)。
我正在尝试为这种类型的函数定义找到文档并将其描述为 API 的一部分,并且我正在努力引用 Typescript 文档的正确部分而没有正确的区分术语。
type Op<EarlyT> = (item:EarlyT) => void
type LateOp = <LateT>(late:LateT) => void;
你所说的“后期绑定泛型”在 TypeScript 中被称为泛型 function 或 call signature,而你所说的“早期绑定泛型”在 TypeScript 中被称为通用type.
相关文档可以在 TypeScript 手册关于泛型类型的部分找到,其中像
LateOp
这样的类型“描述了泛型函数”,而像 Op
这样的类型是“非泛型函数签名,它是一部分通用类型的。
所以在
type GenFunc = <T>(x: T) => void;
GenFunc
type 是非泛型(它没有泛型类型参数)但它指的是泛型 调用签名(它有一个泛型类型参数),而在:
type GenType<T> = (x: T) => void
GenType
type 是泛型(它有一个泛型类型参数)但它指的是一个非泛型 调用签名(它本身没有泛型类型参数,尽管来自泛型类型的类型参数仍然在范围)。
参见TypeScript how to create a generic type alias for a generic function?有关泛型函数和泛型类型之间关系的更多讨论。