TypeScript 泛型约束深入
extends 约束、keyof 操作符、泛型与接口结合 · 难度:高级 · +20XP
泛型约束更多用法
上节课学了基本的泛型约束 T extends HasLength。这节课深入更多实用模式。
keyof — 获取对象键的类型
interface User {
name: string;
age: number;
email: string;
}
type UserKey = keyof User; // "name" | "age" | "email"
// 安全地访问对象属性
function getProperty<T, K extends keyof T>(obj: T, key: K): T[K] {
return obj[key];
}
const user: User = { name: "张三", age: 25, email: "zs@qq.com" };
getProperty(user, "name"); // ✅
// getProperty(user, "phone"); // ❌ phone 不是 User 的属性
实际应用:类型安全的 pick 函数
function pick<T, K extends keyof T>(obj: T, keys: K[]): Pick<T, K> {
const result = {} as Pick<T, K>;
keys.forEach(key => { result[key] = obj[key]; });
return result;
}
const partial = pick(user, ["name", "age"]); // { name: string; age: number }