在 TypeScript 中按值获取枚举键

在 TypeScript 中按值获取枚举键

Get an Enum Key by Value in TypeScript

要按值获取枚举键:

  1. 使用该Object.values()方法获取枚举值的数组。
  2. 使用该indexOf()方法获取数组中值的索引。
  3. 使用该Object.keys()方法获取枚举键的数组。
  4. 访问特定索引处的键数组。
索引.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 枚举只能使用常量枚举表达式,并在编译期间被完全删除。

发表评论