TypeScript 泛型

泛型 = 「带参数的类型」,让组件既有明确的 API 又能复用于不同数据类型。

被 2 篇文章引用TypeScript1140 字2026-10-12全部知识点

TypeScript 泛型#

官方定义很直白:泛型就是「带参数的类型」(types which take parameters)。

软件工程里最重要的能力之一就是构造可复用的组件 —— 组件既要有明确一致的 API,也要能适配不同数据类型。

1. 为什么需要它#

没有泛型时,要写「返回参数本身」的函数,只能这么办:

function identity(arg: any): any { return arg; }
const n = identity(42); // n 的类型是 any —— 类型信息丢了

用 any 的问题:传进去的类型和拿出来的类型脱钩,失去了类型检查的意义。

2. 改用泛型#

function identity<T>(arg: T): T { return arg; }
const n = identity(42); // T 推断为 number
const s = identity("hello"); // T 推断为 string

T 是类型变量 —— 它捕获调用者传入的类型,然后在整个签名里复用。

3. 泛型约束(Constraints)#

有时你要用参数身上的某个属性,但编译器不知道它有:

function longest<T extends { length: number }>(a: T, b: T) {
return a.length >= b.length ? a : b;
}

extends 在这里是约束而不是继承 —— 它表示「T 至少要有 length」。

4. 两类写法#

写法调用方式说明
function f<T>(arg: T): Tf(x) —— 自动推断最常用
let g: <T>(arg: T) => T把泛型写在类型上需要显式声明类型时

5. 易错点#

· 不要在泛型函数里假设 T 具体是什么 —— 除非用 extends 约束过; · 泛型参数默认值:<T = string> 让调用者可以省略; · 不该用泛型的场景:只有一个具体类型时,直接写那个类型更清楚。

参考:TypeScript 官方手册 · Generics

引用了这个词条的文章