在 TypeScript 中按值获取枚举键
Get an Enum Key by Value in TypeScript
要按值获取枚举键:
- 使用该
Object.values()
方法获取枚举值的数组。 - 使用该
indexOf()
方法获取数组中值的索引。 - 使用该
Object.keys()
方法获取枚举键的数组。 - 访问特定索引处的键数组。
索引.ts
// ✅ For String Enums enum Sizes { Small = 'S', Medium = 'M', Large = 'L', } const indexOfS = Object.values(Sizes).indexOf('S' as unknown as Sizes); const key = Object.keys(Sizes)[indexOfS]; console.log(key); // 👉️ "Small" // ✅ For Numeric Enums enum SizesNumeric { Small, Medium, Large, } console.log(SizesNumeric[0]); // 👉️ "Small" console.log(SizesNumeric[1]); // 👉️ "Medium"
TypeScript 枚举是真实对象,存在于运行时。这就是我们能够将枚举传递给
Object.keys
和
Object.values
方法的原因。
Object.keys()
和方法返回包含对象的键和值的Object.values()
数组。
索引.ts
enum Sizes { Small = 'S', Medium = 'M', Large = 'L', } // 👇️ ['Small', 'Medium', 'Large'] console.log(Object.keys(Sizes)); // 👇️ ['S', 'M', 'L'] console.log(Object.values(Sizes));
我们使用indexOf
方法获取值数组中特定值的索引,然后使用括号表示法访问特定索引处的键数组。
如果您必须多次使用此方法,请创建一个可重用的函数。
索引.ts
enum Sizes { Small = 'S', Medium = 'M', Large = 'L', } function getKeyByValue(value: string) { const indexOfS = Object.values(Sizes).indexOf(value as unknown as Sizes); const key = Object.keys(Sizes)[indexOfS]; return key; } console.log(getKeyByValue('S')); // 👉️ Small console.log(getKeyByValue('M')); // 👉️ Medium
如果必须通过值获取数字枚举的键,请使用
反向映射。
索引.ts
// ✅ For Numeric Enums enum SizesNumeric { Small, Medium, Large, } console.log(SizesNumeric[0]); // 👉️ "Small" console.log(SizesNumeric[1]); // 👉️ "Medium" console.log(SizesNumeric[2]); // 👉️ "Large"
不幸的是,您只能使用这种方法来获取numeric
枚举的名称。
字符串枚举成员根本不会生成反向映射。
请注意,如果您使用const enums,文章中的示例将不起作用
。
Const 枚举只能使用常量枚举表达式,并在编译期间被完全删除。