泛型(Generics)
泛型是 TypeScript 的核心特性之一,可以写出类型安全但又不失灵活性的代码——先不指定具体类型,等使用时再传入。
为什么需要泛型
没有泛型时,要么写死类型,要么用 any 丢失类型安全:
// 写死类型 → 不灵活
function wrapValue(value: string): { value: string } {
return { value };
}
// 用 any → 丢失类型信息
function wrapValueAny(value: any): { value: any } {
return { value };
}
const result = wrapValueAny(123);
result.value.toFixed(2); // TS 不会报错,但如果传入字符串就会运行时崩溃用泛型解决
function wrapValue<T>(value: T): { value: T } {
return { value };
}
const a = wrapValue("hello"); // { value: string }
const b = wrapValue(123); // { value: number }
b.value.toFixed(2); // ✅ TS 知道 b.value 是 number,类型安全T 就是类型参数(type parameter),调用时 TS 会自动推断,也可以显式指定:wrapValue<number>(123)。