typescript 当函数具有后期绑定泛型类型时调用什么?[duplicate]

siv3szwd  于 2023-03-09  发布在  TypeScript
关注(0)|答案(1)|浏览(109)
    • 此问题在此处已有答案**:

Generic function type alias(1个答案)
4天前关闭。
当函数具有后期绑定泛型类型时调用什么(仅在调用函数时确定,而不是在定义函数时确定)。
它在下面的代码示例中显示为LateT,并与EarlyT早期绑定情况形成对比,在早期绑定情况下,函数引用本身的类型已经具有类型化约束(并且在计算函数调用时它不是后期绑定的)。
我试图找到这种类型的函数定义的文档,并将其描述为API的一部分,我很难引用Typescript文档的正确部分,而没有正确的区分术语。

type Op<EarlyT> = (item:EarlyT) => void

type LateOp = <LateT>(late:LateT) => void;
ws51t4hk

ws51t4hk1#

所谓的"后期绑定泛型"在TypeScript中称为泛型 * 函数 * 或 * 调用签名 *,而所谓的"早期绑定泛型"在TypeScript中称为泛型 * 类型 *。
相关文档可以在TypeScript手册中泛型类型一节中找到,其中LateOp这样的类型"描述泛型函数",而Op这样的类型是"作为泛型类型一部分的非泛型函数签名"。
所以在

type GenFunc = <T>(x: T) => void;

GenFunc * 类型 * 是非泛型的(它没有泛型类型参数),但是它引用泛型 * 调用签名 *(它具有泛型类型参数),而在:

type GenType<T> = (x: T) => void

GenType * 类型 * 是泛型的(它具有泛型类型参数),但它引用非泛型 * 调用签名 *(它本身没有泛型类型参数,尽管来自泛型类型的类型参数仍在范围内)。
有关泛型函数和泛型类型之间关系的更多讨论,请参见TypeScript how to create a generic type alias for a generic function?

相关问题