泛型基础
约 290 字小于 1 分钟
布欧-Lewyon
2026-05-16
首页 › TypeScript › 函数与泛型 › 泛型基础
泛型函数
// 不用泛型:any 丢失类型信息
function identity(arg: any): any { return arg; }
// 用泛型:保留类型
function identity<T>(arg: T): T {
return arg;
}
const str = identity<string>('hello'); // string
const num = identity(42); // 类型推断为 number泛型接口
interface Response<T> {
code: number;
data: T;
message: string;
}
const userResp: Response<{ name: string; age: number }> = {
code: 200,
data: { name: '张三', age: 28 },
message: 'success',
};泛型约束
interface Lengthwise {
length: number;
}
// T 必须包含 length 属性
function logLength<T extends Lengthwise>(arg: T): number {
return arg.length;
}
logLength('hello'); // ✅ string 有 length
logLength([1, 2, 3]); // ✅ array 有 length
// logLength(42); // ❌ number 无 lengthkeyof 约束
function getValue<T, K extends keyof T>(obj: T, key: K): T[K] {
return obj[key];
}
const user = { name: '张三', age: 28, email: 'z@example.com' };
getValue(user, 'name'); // ✅ string
getValue(user, 'age'); // ✅ number
// getValue(user, 'id'); // ❌ "id" 不在 keyof user 中小结
| 语法 | 作用 |
|---|---|
<T> | 泛型参数 |
<T extends U> | 泛型约束 |
<K extends keyof T> | 约束为 T 的键名 |
| 类型推断 | 调用泛型函数时可省略 <T> |
