keyof
和 typeof
是 TypeScript 中的两个操作符,它们分别用于从类型中提取键和获取变量的类型。
-
keyof T
:用于获取类型T
的所有键的联合类型。也就是说,keyof T
将返回一个包含类型T
中所有属性名的联合类型。 -
typeof x
:用于获取变量x
的类型。它会返回变量x
的类型,包括基本类型、对象类型、函数类型等。
当将它们连起来使用时,可以实现一些有趣的功能。例如:
type Person = {
name: string;
age: number;
gender: 'male' | 'female';
};
const person: Person = {
name: 'Alice',
age: 30,
gender: 'female',
};
type KeysOfPerson = keyof typeof person;
// 等同于 type KeysOfPerson = 'name' | 'age' | 'gender'
const key: KeysOfPerson = 'name'; // 正确
const key2: KeysOfPerson = 'address'; // 错误,因为'address'不是Person类型的键
在这个例子中,我们首先定义了一个 Person
类型,然后创建了一个 person
对象。接着我们使用 typeof person
来获取 person
对象的类型,然后再使用 keyof
来获取该类型的所有键,最终得到一个类型 KeysOfPerson
,包含了 Person
类型的所有键的联合类型。
通过将 keyof
和 typeof
连起来使用,我们能够以一种类型安全的方式获取对象的所有键,并将它们用于类型约束或其他操作中。