Mik*_*rin 1 javascript enums typescript
节点版本: 6.11.3
打字稿版本: 2.1.6
我们的项目中有很多枚举,大部分看起来像这样:
export type ThingType = "thing1" | "thing2";
export namespace ThingType {
export const THING_ONE = "thing1";
export const THING_TWO = "thing2";
}
Run Code Online (Sandbox Code Playgroud)
我想在端点中向需要这些字符串值的端点的使用者公开这些值。所以我创建了一个如下所示的端点:
const enums = {
thingType: ThingType,
...
}
Run Code Online (Sandbox Code Playgroud)
返回的 json 看起来像:
"data": {
"thingType": {
"THING_ONE": "thing1",
"THING_TWO": "thing2"
}
}
Run Code Online (Sandbox Code Playgroud)
我希望它的输出如下:
"data": {
"thingType": ["thing1", "thing2"]
}
Run Code Online (Sandbox Code Playgroud)
对于普通的 javascript 对象,这相当简单,我只需添加到端点values()的末尾即可。ThingType但values()不存在于 TS 中的命名空间或枚举上。我在 Typescript 中的命名空间文档中没有找到任何内容,但我觉得一定有一些东西可以让我轻松获取枚举值。
命名空间被编译成普通的 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);
Run Code Online (Sandbox Code Playgroud)
节目
{ thingType: ['thing1', 'thing2'] }
Run Code Online (Sandbox Code Playgroud)
如果Object.values不可用,它会变得更加冗长:
const enums = {
thingType: Object.keys(ThingType).map(k => ThingType[k])
}
Run Code Online (Sandbox Code Playgroud)