打字稿枚举值作为数组
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')删除索引我的意思是
也是一个不错的方法:)
这看起来很奇怪.. 为什么要削减一半的价值?如果我们有奇数长度怎么办?绝对不需要拼接。以上是关于打字稿枚举值作为数组的主要内容,如果未能解决你的问题,请参考以下文章