TypeScript中NotGeneric类型的<T>前缀语法含义是什么?
问题解答
你提到的NotGeneric类型前的<T>,是给这个类型描述的函数本身声明泛型参数,和Generic<T>这种“类型本身的泛型”不是一回事,具体区别和作用如下:
两种泛型的核心区别
type Generic<T> = T:这是类型本身携带泛型参数,你在使用这个类型时必须明确指定T的具体类型(比如Generic<string>),一旦指定,该类型就固定为对应类型,后续无法变更。type NotGeneric = <T>(x: T) => T:这里的<T>是函数类型的泛型参数,它表示这个类型对应的是一个「能接收任意类型T的参数x,并且返回与x同类型值」的函数。这个泛型参数T不属于NotGeneric类型本身,而是属于它描述的函数——当你调用该函数时,TypeScript会根据传入的参数自动推断出T的具体类型。
结合你的代码例子理解
- 定义
const notGeneric: NotGeneric = <T>(x: T) => x时,NotGeneric类型不需要你传入泛型参数,因为它的泛型逻辑是绑定在函数上的。 - 调用
notGeneric('')时,TS会根据传入的空字符串推断T为string,因此返回值类型是string;调用notGeneric(0)时,推断T为number,返回值类型是number——这就是你观察到的“编译器从x推断出类型T”的原因。
简单来说,NotGeneric里的<T>是在告诉TypeScript:“我描述的这个函数是泛型函数,它的泛型参数不需要提前指定,会在调用时根据传入的参数自动确定”。
内容的提问来源于stack exchange,提问作者Alex Van de Kleut
相关产品推荐
相关产品推荐

