节点版本: 6.11.3
打字稿版本: 2.1.6
我们项目中有一堆枚举,大部分都是这样的:
export type ThingType = "thing1" | "thing2";
export namespace ThingType {
export const THING_ONE = "thing1";
export const THING_TWO = "thing2";
}
我想在端点中为需要这些字符串值的端点的使用者公开这些值。所以我创建了一个如下所示的端点:
const enums = {
thingType: ThingType,
...
}
返回json看起来像:
"data": {
"thingType": {
"THING_ONE": "thing1",
"THING_TWO": "thing2"
}
}
我希望它输出如下:
"data": {
"thingType": ["thing1", "thing2"]
}
对于普通的javascript对象,这非常简单,我只需将values()
添加到我的端点ThingType
的末尾。但是在TS中的名称空间或枚举中不存在values()
。我在docs on namespaces in Typescript中没有找到任何东西,但我觉得有些东西可以让我轻松获得枚举值。
答案 0 :(得分:2)
命名空间被编译为普通的javacsript对象,因此Object.values()按预期工作(当然在支持Object.values
的环境中):
export type ThingType = "thing1" | "thing2";
export namespace ThingType {
export const THING_ONE = "thing1";
export const THING_TWO = "thing2";
}
const enums = {
thingType: Object.values(ThingType)
}
console.(enums);
显示
{ thingType: ['thing1', 'thing2'] }
如果Object.values
不可用,则会更加详细:
const enums = {
thingType: Object.keys(ThingType).map(k => ThingType[k])
}