首页 > 解决方案 > 打字稿切换枚举键

问题描述

给定一个枚举:

export enum COLOR {
   BLUE= 'blue',
   DARK_BLUE='blue',
   RED= 'red',
}

我想做一个这样的开关盒:

function foo(colorKey: string){
//for exemple colorkey has value : DARK_BLUE
  switch (colorKey){
    case COLOR.BLUE:
      //do somthing:
    case  COLOR.DARK_BLUE:
      //do another thing
} 

这不起作用,因为 COLOR.DARK_BLUE 返回值('blue')而不是键(DARK_BLUE),我想将开关的值与枚举的键而不是它的值进行比较。

编辑: 这段代码没问题,当我们调用 foo 时我们确实有 IntelliSense,这很好,但问题是:

  1. 当我们编写 foo 的 switch case 时,我们必须 copy_past 枚举的所有值(失去智能)。
  2. 如果有一天某天向枚举添加了一个新值,编译器将无法检测到 switch case 不是更详尽的。

这就是为什么我仍在寻找更好的方法。

我想出了自己的解决方案,我一有时间就会发布它,但总而言之,我创建了一个值与键相同的枚举。

旧枚举的值现在存储在不同的常量对象中。我的结论是,在 typecrpit 枚举中,我们不能在一个枚举中存储 2 个信息,但仍然能够正确访问它。

如果您有一个更好的解决方案,我仍在寻找

标签: typescriptenums

解决方案


只需检查它的关键是在枚举...

function foo(colorKey: string){
  const color = COLOR[colorKey as keyof typeof COLOR];
  if (color) {
    // It is one of enum values
  } else {
    // ...
  }
}

推荐阅读