【问题标题】:Typescript enum values as array打字稿枚举值作为数组
【发布时间】:2019-09-25 22:24:42
【问题描述】:

是否可以将 TypeScript 中的枚举值作为数组获取?

像这样:

enum MyEnum {
    FOO = 'foo',
    BAR = 'bar'
}

变成

['foo', 'bar']

【问题讨论】:

    标签: typescript enums


    【解决方案1】:

    是的,可以使用:

    Object.values(MyEnum)
    

    因为 enum 是编译后的 JS 对象:

    var MyEnum;
    (function (MyEnum) {
        MyEnum["FOO"] = "foo";
        MyEnum["BAR"] = "bar";
    })(MyEnum || (MyEnum = {}));
    

    【讨论】:

      【解决方案2】:

      string 枚举最简单的方法是使用Object.values

      enum MyEnum {
          FOO = 'foo',
          BAR = 'bar'
      }
      console.log(Object.values(MyEnum));
      

      【讨论】:

      【解决方案3】:

      对于完全类型化的代码,您可能希望借助 template literal 运算符将值列表推断为类型:

      enum MyEnum {
          FOO = 'foo',
          BAR = 'bar'
      }
      
      type MyEnumValue = `${MyEnum}`
      // => type MyEnumValue = "foo" | "bar"
      
      const values: MyEnumValue[] = Object.values(MyEnum)
      // => ["foo", "bar"]
      

      参考文章:Get the values of an enum dynamically (免责声明:作者在此)

      【讨论】:

        【解决方案4】:

        编辑:

        恕我直言@Fyodor 的解决方案更简洁,因为它涵盖了字符串枚举:

        const enumAsArray = Object.values(MyEnum).filter(value => typeof value === 'string')
        

        【讨论】:

        • const enumAsArray = Object.values(MyEnum).filter(value => typeof value === 'string')(用必要的类型替换'string')删除索引我的意思是
        • 也是一个不错的方法:)
        • 这看起来很奇怪.. 为什么要削减一半的价值?如果我们有奇数长度怎么办?绝对不需要拼接。
        猜你喜欢
        • 2019-03-04
        • 2019-07-09
        • 2020-04-30
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-09-26
        • 1970-01-01
        相关资源
        最近更新 更多