在 TypeScript 中将枚举(enum)用作受限键(key)或值类型
极简版 (猜你想看)
对一个 enum A
而言,key in A
指的是A的值,key in keyof typeof A
指的是它的键。
翻译
在 TypeScript 中使用枚举作为受限键或值类型
使用keyof typeof
将枚举作为受限键类型。
构建的类型将包含所有枚举键,其值初始化为any
。
enum Sizes {
Small = 'S',
Medium = 'M',
Large = 'L',
ExtraLarge = 'XL',
}
/**
* 👇️ let values: {S: any; M: any; L: any; XL: any}
*/
let values: { [key in Sizes]: any };
/**
* 👇️ let keys: {Small: any; Medium: any; Large: any; ExtraLarge: any}
*/
let keys: { [key in keyof typeof Sizes]: any };
[!TIP] The code for this article is available on GitHub
第一个示例展示了如何构造一个包含枚举值作为键的类型,第二个示例则使用枚举键构造了一个类型。
> [!TIP]
> 如果不想让构造类型中的所有键或值都是必填项,可使用问号将其设置为可选项。
enum Sizes {
Small = 'S',
Medium = 'M',
Large = 'L',
ExtraLarge = 'XL',
}
/**
* 👇️ let values: {S?: any; M?: any; L?: any; XL?: any}
*/
let values: { [key in Sizes]?: any };
/**
* 👇️ let keys: {Small?: any; Medium?: any; Large?: any; ExtraLarge?: any}
*/
let keys: { [key in keyof typeof Sizes]?: any };
现在,使用者只能指定他需要的密钥。
enum Sizes {
Small = 'S',
Medium = 'M',
Large = 'L',
ExtraLarge = 'XL',
}
/**
* 👇️ let values: {S?: any; M?: any; L?: any; XL?: any}
*/
let values: { [key in Sizes]?: any };
values = { M: 'medium' };
/**
* 👇️ let keys: {Small?: any; Medium?: any; Large?: any; ExtraLarge?: any}
*/
let keys: { [key in keyof typeof Sizes]?: any };
keys = { Large: 'large' };
[!TIP] The code for this article is available on GitHub
在处理枚举时,keyof typeof
(暂未翻译)构建了一种类型,将所有枚举键表示为字符串。
enum Sizes {
Small = 'S',
Medium = 'M',
Large = 'L',
ExtraLarge = 'XL',
}
// 👇️ type KeysUnion = "Small" | "Medium" | "Large" | "Extra Large"
type KeysUnion = keyof typeof Sizes;
如果您需要检查枚举中是否存在某个值,请点击这篇文章。