keyof
是 TypeScript 中的关键字,用于生成类型,它会创建一个对象类型的所有键的联合类型。
keyof
的作用
keyof
用于获取一个对象类型的所有键,并将这些键作为一个联合类型。
基本语法
type Keys = keyof ObjectType;
ObjectType
是你要操作的对象类型。Keys
将是一个联合类型,包含ObjectType
的所有键。
示例
1. 基本用法
type User = {
id: number;
name: string;
age: number;
};
type UserKeys = keyof User; // 'id' | 'name' | 'age'
keyof User
的结果是联合类型'id' | 'name' | 'age'
。
2. 动态键的获取
const obj = { a: 1, b: 2, c: 3 };
type ObjKeys = keyof typeof obj; // 'a' | 'b' | 'c'
typeof obj
获取obj
的类型。keyof typeof obj
返回键的联合类型。
3. 结合索引类型
type User = {
id: number;
name: string;
age: number;
};
type ValueType<T, K extends keyof T> = T[K];
type IdType = ValueType<User, 'id'>; // number
type NameType = ValueType<User, 'name'>; // string
K extends keyof T
表示K
必须是T
的键。T[K]
表示获取键K
的值类型。
实际应用场景
1. 限制对象的动态键访问
type Config = {
mode: string;
version: number;
};
function getConfigValue<T extends keyof Config>(key: T): Config[T] {
const config: Config = { mode: 'production', version: 1 };
return config[key];
}
const mode = getConfigValue('mode'); // 返回 string 类型
const version = getConfigValue('version'); // 返回 number 类型
2. 提取键值对关系
type Settings = {
theme: 'dark' | 'light';
fontSize: number;
};
type Keys = keyof Settings; // 'theme' | 'fontSize'
type Values = Settings[keyof Settings]; // 'dark' | 'light' | number
总结
keyof
的功能:生成对象类型的键的联合类型。- 主要用途:在类型推导、约束和动态操作中起到非常重要的作用。
- 联合类型:
keyof
生成的类型总是一个字符串或字符串字面量的联合类型,比如'key1' | 'key2'
。