泛型的本质是类型层面的参数化。function box
进阶用法:泛型约束(extends)限制 T 必须满足某种结构(如
// 基础泛型:传入什么类型,传出什么类型
function box<T>(v: T): T { return v; }
const s = box('hi'); // T = string,s 是 string
const n = box(42); // T = number
// 泛型约束:T 必须有 length 属性
function len<T extends { length: number }>(x: T): number {
return x.length;
}
len('abc'); // ✓ 字符串有 length
len([1, 2]); // ✓ 数组有 length
len(123); // ✗ number 没有 length
// 泛型接口 + 默认值
type KV<K = string, V = unknown> = { key: K; val: V };
const a: KV = { key: 'k', val: 1 }; // 默认 string/unknown
const b: KV<number, string> = { key: 1, val: 'v' };