概念学习/泛型(Generics)

泛型(Generics)

typescript

使用泛型为函数、类型和类引入可复用的类型参数,提高抽象与类型安全。

概念定义

泛型允许在声明时引入类型参数,并在使用时传入具体类型,获得灵活且安全的类型推断。

代码示例

泛型函数

JavaScript
function identity<T>(value: T): T {
  return value;
}
const s = identity<string>('hi');
const n = identity(42); // 类型推断为 number

泛型参数 T 可显式指定,也可由调用上下文推断。

受限泛型

JavaScript
function len<T extends { length: number }>(x: T): number {
  return x.length;
}

使用 extends 约束泛型参数,确保存在所需属性或结构。

使用场景
  • 集合/容器类型的复用(如数组、映射表)
  • 函数库/工具库中的类型安全抽象
  • 组件/Hook 的输入输出约束(前端)
常见错误
  • 滥用 any 导致丢失泛型约束
  • 未添加 extends 限制导致不可用属性访问
前置知识
ts-typests-interfaces
后续主题
ts-narrowingts-utility-types