keyof
是 TypeScript 中的一个操作符,用于获取对象类型的所有键(属性名)的联合类型。它可以用于在编译时检查对象属性名的正确性,从而提高代码的类型安全性。
以下是一个简单的例子:
interface Person {
name: string;
age: number;
address: string;
}
type PersonKeys = keyof Person;
// PersonKeys 的类型为 "name" | "age" | "address"
在这个例子中,PersonKeys
是 keyof Person
的结果,它是 "name" | "age" | "address"
类型,表示 Person
接口的所有属性名的联合类型。
keyof
主要有以下应用场景:
1. 访问对象属性值
function getProperty<T, K extends keyof T>(obj: T, key: K): T[K] {
return obj[key];
}
const person: Person = { name: "John", age: 30, address: "123 Main St" };
const nameValue: string = getProperty(person, "name"); // 正确
const ageValue: number = getProperty(person, "age"); // 正确
const invalidValue: boolean = getProperty(person, "invalid"); // 错误,"invalid" 不是 Person 的属性
在这个例子中,getProperty
函数接受一个对象 obj
和一个属性名 key
,通过 T[K]
来获取对象的属性值。通过使用 keyof
,可以确保传入的属性名是对象实际拥有的属性,避免了拼写错误和使用不存在的属性。
2. 限制函数参数
function printProperty<T, K extends keyof T>(obj: T, key: K): void {
console.log(obj[key]);
}
printProperty(person, "name"); // 输出: John
printProperty(person, "age"); // 输出: 30
printProperty(person, "invalid"); // 错误,"invalid" 不是 Person 的属性
通过将 key
的类型限制为 keyof T
,可以在函数内部安全地访问对象的属性值,而不必担心传入不存在的属性名。