在 TypeScript 中获取枚举值作为数组

在 TypeScript 中获取枚举值作为数组

Get Enum values as an Array in TypeScript

要将所有枚举值作为数组获取,请将枚举传递给Object.values()
方法,例如
const values = Object.values(StringEnum)Object.values
方法将返回枚举值的数组,因为 TypeScript 中的枚举是真实对象并且存在于运行时。

索引.ts
// ✅ For STRING Enums enum StringEnum { Small = 'S', Medium = 'M', Large = 'L', } const values1 = Object.values(StringEnum); // 👇️ ['S', 'M', 'L'] console.log(values1); const keys1 = Object.keys(StringEnum); // 👇️ ['Small', 'Medium', 'Large'] console.log(keys1); // ✅ For NUMERIC Enums enum NumericEnum { Small, Medium, Large, } const values2 = Object.keys(NumericEnum).filter((v) => !isNaN(Number(v))); console.log(values2); // 👉️ ['0', '1', '2'] const keys2 = Object.keys(NumericEnum).filter((v) => isNaN(Number(v))); console.log(keys2); // 👉️ ['Small', 'Medium', 'Large']

枚举是 TypeScript 中的真实对象,存在于运行时。这就是我们能够使用
Object.values
方法获取包含枚举值的数组的原因。

Object.values()方法返回一个包含对象值的数组。

索引.ts
// 👇️ ['Tom', 30] console.log(Object.values({ name: 'Tom', age: 30 }));

然而,数字和字符串枚举的输出是不同的。

索引.ts
// ✅ For STRING Enums enum StringEnum { Small = 'S', Medium = 'M', Large = 'L', } // 👇️ ['S', 'M', 'L'] console.log(Object.values(StringEnum)); // ✅ For NUMERIC Enums enum NumericEnum { Small, Medium, Large, } // 👇️ ['Small', 'Medium', 'Large', 0, 1, 2] console.log(Object.values(NumericEnum));

请注意,当将数字枚举传递给该Object.values()方法时,将返回枚举键和值。

我们没有为数字枚举提供初始值,因此它的值开始于0并自动递增。

这就是为什么我们必须在上面的示例中过滤掉不必要的键。

如果需要遍历枚举值数组,可以使用for...of
循环或
Array.forEach方法。

索引.ts
enum StringEnum { Small = 'S', Medium = 'M', Large = 'L', } const values1 = Object.values(StringEnum); // 👇️ ['S', 'M', 'L'] console.log(values1); for (const v of values1) { console.log(v); // 👉️ S, M, L } values1.forEach((v, index) => { console.log(v); // 👉️ S, M, L });

请注意,如果您使用const 枚举,上面的示例将不起作用
,因为 const 枚举只能使用常量枚举表达式,并在编译期间被完全删除。

发表评论