TypeScript 的泛型(Generics)作用理解
把泛型想成 “万能模具”。
-
不用泛型——每做一种点心就得换一套模具
// 只做数字的盒子 function makeNumberBox(n: number): number { return n; }// 只做字符串的盒子 function makeStringBox(s: string): string { return s; }
写一堆重复代码,烦!
-
用泛型——一套模具,什么料都能倒
// T 就是一个“占位符”,到时传什么类型就变成什么类型 function makeBox<T>(value: T): T {return value; }const numBox = makeBox<number>(123); // 模具变成数字盒 const strBox = makeBox<string>('hello'); // 模具变成字符串盒
一套代码,通吃所有类型。
-
还能给模具加“约束”
只想做“有长度”的点心?function logLength<T extends { length: number }>(item: T) {console.log(item.length); } logLength('abc'); // 3 logLength([1,2,3]); // 3 logLength(123); // ❌ 报错,数字没 length
一句话总结:
泛型 = 写一次模具,适配所有形状,既省代码又保类型安全。