比较 Typescript 中的枚举
How to compare Enums in Typescript
要比较枚举,请使用点表示法获取特定枚举属性的值并将其与另一个值进行比较,例如if (MyEnum.Small < 2) {}
. 没有提供初始值的数字枚举的值是自动递增的整数,从0
.
索引.tsx
enum ShirtSizes { Small, Medium, Large, } const small = ShirtSizes.Small; // 👉️ 0 const medium = ShirtSizes.Medium; // 👉️ 1 if (small < medium) { console.log('✅ This runs'); } if (small === 0) { console.log('✅ This runs'); } const enumKey = ShirtSizes[ShirtSizes.Small]; console.log(enumKey); // 👉️ "Small" if (enumKey === 'Small') { console.log('✅ This runs'); }
您可以使用点表示法访问枚举的特定值。
要将值与另一个值进行比较,请使用比较运算符之一,例如
<
(小于)>
(大于)或===
(等于)。
该if
块仅在满足条件时运行。
该示例显示了一个
数字枚举,我们没有为其Small
键值指定初始值 is 0
、Medium
=1
和Large
= 2
。
使用数字枚举时,可以使用
反向映射
根据值获取相应的键。
索引.tsx
enum ShirtSizes { Small, Medium, Large, } const small = ShirtSizes.Small; // 👉️ 0 const medium = ShirtSizes.Medium; // 👉️ 1 const enumKey = ShirtSizes[ShirtSizes.Small]; console.log(enumKey); // 👉️ "Small" const eKey = ShirtSizes[0]; console.log(eKey); // 👉️ Small
上面的示例使用反向映射来获取对应于 value 的枚举键0
。
请注意,您只能在使用数字枚举时使用反向映射,因为它们不是为字符串枚举生成的。
下面是一个示例,说明如何获取字符串枚举的键和值数组,并检查数组中是否包含特定值。
索引.js
enum ShirtSizes { Small = 'SMALL', Medium = 'MEDIUM', Large = 'LARGE', } const keys = Object.keys(ShirtSizes); console.log(keys); // 👉️ ['Small', 'Medium', 'Large'] if (keys.includes('Small')) { console.log('✅ This runs'); } const values = Object.values(ShirtSizes); console.log(values); if (values.includes('SMALL' as unknown as ShirtSizes)) { console.log('✅ This runs'); }
TypeScript 中的枚举是真实的对象,因此我们可以使用Object.keys()
和Object.values()
方法来获取枚举键和值的数组。
这些示例使用该
includes()
方法检查枚举的键和值中是否包含特定值,但您可以根据您的用例进行调整。如果使用数字枚举,该Object.keys()
方法返回一个包含枚举键和值的数组,因此您必须过滤掉不需要的值。
索引.tsx
enum ShirtSizes { Small, Medium, Large, } const keys = Object.keys(ShirtSizes).filter((v) => isNaN(Number(v))); console.log(keys); // 👉️ ['Small', 'Medium', 'Large'] if (keys.includes('Small')) { console.log('✅ This runs'); } const values = Object.values(ShirtSizes).filter((v) => !isNaN(Number(v))); console.log(values); // 👉️ [0, 1, 2]
数字枚举的概念是相同的,但是我们必须添加对该
filter
方法的调用以从返回的数组中排除不必要的值。