keyof
在TypeScript中,keyof
类型操作符用于获取一个对象类型的所有键(key)的类型组成的联合类型(union type)。简而言之,它允许你获取一个对象的所有属性名作为一个类型。
这里有一个简单的例子来说明keyof
的用法:
interface Person {name: string;age: number;location: string;
}type PersonKeys = keyof Person; // "name" | "age" | "location"
在这个例子中,PersonKeys
类型将会是 "name" | "age" | "location"
,这是由Person
接口的所有属性名组成的联合类型。
联合类型:允许一个变量可以是多个不同的数据类型之一。
keyof
类型操作符在类型安全和泛型编程中非常有用。例如,你可以用它来确保一个函数接收的对象属性名是该对象类型的有效键:
function getProperty<T, K extends keyof T>(obj: T, key: K): T[K] {return obj[key];
}const person: Person = {name: "Alice",age: 30,location: "New York"
};const name = getProperty(person, "name"); // 正确,类型推断为 string
const age = getProperty(person, "age"); // 正确,类型推断为 number
// const invalidProperty = getProperty(person, "invalidKey"); // 错误,TypeScript 会报错
在这个泛型函数getProperty
中,K
被约束为keyof T
,这意味着key
参数必须是T
类型对象的有效键。这样,当你尝试获取一个对象的属性时,如果键名拼写错误或者不是该对象的属性,TypeScript编译器会给出错误提示,从而增强了代码的类型安全性。