用途:该技能用于定义泛型类型或函数、约束类型参数、编写类型级代码以及为泛型编写文档。核心心智模型是把泛型看作“类型之间的函数”:泛型接收类型参数并产出具体类型,正如函数接收参数并返回值。
主要能力与要点:
- 约束类型参数:用 extends 限制可传入的类型,例如 type MyPick<T extends object, K extends keyof T> = { [P in K]: T[P] };无约束的 type BadPick<T, K> 会在实现中报错,且无法拦截非法实例化。
- 命名:简单局部泛型可用 T、K 等短名;复杂或导出的泛型应使用描述性名称,如 ObjectType、ValueTransformer。
- 文档:用 TSDoc 的 @template 标签说明类型参数,例如 @template T - The original object type。
- 泛型函数:可定义关联泛型类型并支持类型推断,如 function pick<T extends object, K extends keyof T>(obj: T, ...keys: K[]): Pick<T, K>,TypeScript 会从实参推断类型。
- 泛型类:捕获无需传给方法的类型,如 class Box<T>,类型可由构造函数推断。
适用场景:定义转换其他类型的泛型、编写带类型参数的泛型函数、约束可传入泛型的类型、用 TSDoc 记录泛型、创建可复用的类型工具。
限制与反模式:无约束的类型参数会允许非法实例化并导致实现错误;复杂泛型中使用单字母命名会降低可读性;仅用于返回值的泛型等价于类型断言,没有类型安全;公开泛型缺少 TSDoc 会损害开发体验。资料未提供安装命令、平台或收费信息。