【发布时间】:2019-09-25 22:24:42
【问题描述】:
是否可以将 TypeScript 中的枚举值作为数组获取?
像这样:
enum MyEnum {
FOO = 'foo',
BAR = 'bar'
}
变成
['foo', 'bar']
【问题讨论】:
标签: typescript enums
是否可以将 TypeScript 中的枚举值作为数组获取?
像这样:
enum MyEnum {
FOO = 'foo',
BAR = 'bar'
}
变成
['foo', 'bar']
【问题讨论】:
标签: typescript enums
是的,可以使用:
Object.values(MyEnum)
因为 enum 是编译后的 JS 对象:
var MyEnum;
(function (MyEnum) {
MyEnum["FOO"] = "foo";
MyEnum["BAR"] = "bar";
})(MyEnum || (MyEnum = {}));
【讨论】:
对string 枚举最简单的方法是使用Object.values
enum MyEnum {
FOO = 'foo',
BAR = 'bar'
}
console.log(Object.values(MyEnum));
【讨论】:
对于完全类型化的代码,您可能希望借助 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 (免责声明:作者在此)
【讨论】:
编辑:
恕我直言@Fyodor 的解决方案更简洁,因为它涵盖了字符串枚举:
const enumAsArray = Object.values(MyEnum).filter(value => typeof value === 'string')
【讨论】:
const enumAsArray = Object.values(MyEnum).filter(value => typeof value === 'string')(用必要的类型替换'string')删除索引我的意思是