TypeScript 泛型 — 可复用的类型
泛型让你写类型安全的可复用代码,告别 any · 难度:高级 · +20XP
泛型是什么?
泛型(Generics)让函数、接口、类可以处理任意类型,同时保持类型安全。之前你学 JS 时用 any 来"通吃",但 any 不安全。泛型既灵活又安全。
一个例子说明泛型
// ❌ 不用泛型 — 用 any,不安全
function identity(arg: any): any {
return arg;
}
const result = identity("hello");
// result 的类型是 any,无法获得任何代码提示
// ✅ 用泛型 — 保留类型信息
function identity<T>(arg: T): T {
return arg;
}
const result = identity("hello"); // result 的类型是 string!
const num = identity(42); // num 的类型是 number!
泛型约束
// 要求 T 必须有 length 属性
interface HasLength { length: number; }
function logLength<T extends HasLength>(arg: T): T {
console.log(arg.length);
return arg;
}
logLength("hello"); // ✅ 字符串有 length
logLength([1,2,3]); // ✅ 数组有 length
// logLength(123); // ❌ 数字没有 length!
实际应用:通用 API 响应类型
interface ApiResult<T> {
code: number;
data: T;
message: string;
}
// 请求用户列表
type UserList = ApiResult<User[]>;
// 请求单个用户
type UserDetail = ApiResult<User>;