打字稿枚举值作为数组

Posted

技术标签:

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

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

像这样:

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

变成

['foo', 'bar']

【问题讨论】:

【参考方案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));

【讨论】:

这个答案更详细***.com/questions/39372804/…【参考方案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')删除索引我的意思是 也是一个不错的方法:) 这看起来很奇怪.. 为什么要削减一半的价值?如果我们有奇数长度怎么办?绝对不需要拼接。

以上是关于打字稿枚举值作为数组的主要内容,如果未能解决你的问题,请参考以下文章

如何在打字稿接口/类型中将枚举值类型转换为数组?

我可以使用打字稿将对象键限制为枚举值吗?

将打字稿枚举转换为枚举数组

在打字稿中将枚举类型作为参数传递

打字稿:如何检查一个值是不是是有效的枚举键值? [复制]

在打字稿中使用枚举作为接口键