如何在 Typescript 中比较枚举

要比较枚举,请使用点 . 表示法获取特定枚举属性的值并将其与另一个值进行比较,例如 if (MyEnum.Small < 2) {}。 数字枚举的值,没有提供初始值,是自动递增的整数,从 0 开始。

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');
}

如何在 Typescript 中比较枚举

我们可以使用点表示法访问枚举上的特定值。

要将值与另一个值进行比较,请使用比较运算符之一,例如 <(小于)>(大于)或 ===(等于)。

if 块仅在满足条件时运行。

该示例显示了一个数字枚举,我们没有为其指定初始值,因为 Small 键的值是 0、Medium = 1 和 Large = 2。

使用数字枚举时,可以使用反向映射根据值获取对应的键。

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

上面的示例使用反向映射来获取枚举键,它对应于值 0。

请注意 ,我们只能在使用数字枚举时使用反向映射,因为它们不是为字符串枚举生成的。

这是一个如何获取字符串枚举的键和值的数组并检查数组中是否包含特定值的示例。

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() 方法会返回一个包含枚举键和值的数组,因此我们必须过滤掉不必要的值。

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 方法的调用以从返回的数组中过滤掉不必要的值。