TypeScript 泛型从入门到实战
泛型的价值不在于“看起来高级”,而在于让类型跟着输入值一起变化。
基础用法
function first<T>(list: T[]): T | undefined {
return list[0];
}
调用 first([1, 2, 3]) 时,T 会被推断为 number,返回值类型也随之收窄。
条件类型与 infer
type UnwrapPromise<T> = T extends Promise<infer U> ? U : T;
infer U 会捕获 Promise 内部的类型,这在处理异步函数返回值时非常常见。
约束泛型
function getProp<T, K extends keyof T>(obj: T, key: K): T[K] {
return obj[key];
}
K extends keyof T 保证了传入的 key 一定存在于对象上,避免运行时才发现拼写错误。
小结
泛型不是语法糖,而是把“类型逻辑”也当作程序来写。