keyof 是 TS 的类型级运算符,作用于对象类型时返回其全部键的字面量联合:keyof { name: string; age: number } 得到 name 与 age 的联合。它常与泛型约束搭配,写一个函数只允许传入对象已有的键,拼错属性名时编译器立刻提示,这是类型安全取值的核心手段。
keyof 的真正威力在与工具类型结合:Partial、Pick、Omit 内部都用 keyof 遍历键。配合 in 还能写映射类型:type Nullable
type User = { name: string; age: number };
type UserKey = keyof User; // 'name' | 'age'
function get<T, K extends keyof T>(obj: T, key: K): T[K] {
return obj[key];
}
const u: User = { name: 'tom', age: 3 };
get(u, 'name'); // OK,返回 string
// get(u, 'tel'); // 报错:tel 不属于 User 的键