在 TypeScript 中按索引访问枚举
How to access an Enum by Index in TypeScript
要按索引访问枚举:
- 使用该
Object.values()
方法获取包含枚举值的数组。 - 使用方括号访问特定索引处的数组并获取值。
索引.ts
// ✅ For STRING Enums enum Sizes { Small = 'S', Medium = 'M', Large = 'L', } const indexOfS = Object.keys(Sizes).indexOf('Small'); console.log(indexOfS); const s = Object.values(Sizes)[indexOfS]; console.log(s); // 👉️ "S" const indexOfM = Object.keys(Sizes).indexOf('Medium'); console.log(indexOfM); // 👉️ 1 const m = Object.values(Sizes)[indexOfM]; console.log(m); // 👉️ "M" // ✅ For Numeric Enums enum NumericEnum { Small, Medium, Large, } const s1 = NumericEnum[0]; console.log(s1); // 👉️ Small const m1 = NumericEnum[1]; console.log(m1); // 👉️ Medium
TypeScript 中的枚举是真实的对象,存在于运行时。这就是我们能够将枚举传递给
Object.keys
和
Object.values
方法的原因。
该Object.keys()
方法返回一个包含枚举键的数组和该Object.values()
方法 – 一个包含枚举值的数组。
索引.ts
// ✅ For STRING Enums enum Sizes { Small = 'S', Medium = 'M', Large = 'L', } console.log(Object.keys(Sizes)); // 👉️ ['Small', 'Medium', 'Large'] console.log(Object.values(Sizes)); // 👉️ ['S', 'M', 'L']
现在我们可以使用索引来访问枚举的特定键或值。
当与数字枚举一起使用时,Object.keys()
andObject.values()
方法返回一个包含枚举的键和值的数组,因此如果您只需要一个或另一个,则需要过滤掉不需要的值。
索引.ts
// ✅ For Numeric Enums enum NumericEnum { Small, Medium, Large, } const names = Object.keys(NumericEnum).filter((v) => isNaN(Number(v))); console.log(names); // 👉️ ['Small', 'Medium', 'Large'] const values = Object.values(NumericEnum).filter((v) => !isNaN(Number(v))); console.log(values); // 👉️ [0, 1, 2]
但是,在使用数字枚举时,您可以使用
反向映射
通过值获取枚举的键。
索引.ts
// ✅ For Numeric Enums enum NumericEnum { Small, Medium, Large, } const s1 = NumericEnum[0]; console.log(s1); // 👉️ "Small" const m1 = NumericEnum[1]; console.log(m1); // 👉️ "Medium"
不幸的是,您只能使用这种方法来获取数字枚举的名称。
字符串枚举成员根本不会生成反向映射。
如果您的数字枚举的初始值与 不同0
,您可以将枚举传递给Object.values()
方法并访问特定索引。
索引.ts
enum NumericEnum { Small = 1, Medium, Large, } const s1 = Object.values(NumericEnum)[0]; console.log(s1); // 👉️ "Small" const m1 = Object.values(NumericEnum)[1]; console.log(m1); // 👉️ "Medium"
即使示例中的枚举的初始值为,我们也可以使用该方法1
访问索引处的对。0
Object.values()
索引.ts
enum NumericEnum { Small = 1, Medium, Large, } // 👇️ ['Small', 'Medium', 'Large', 1, 2, 3] console.log(Object.values(NumericEnum));
请注意,如果您使用const 枚举,上面的示例将不起作用
,因为 const 枚举只能使用常量枚举表达式,并在编译期间被完全删除。