在Typescript中获取命名空间的所有值?

时间:2017-10-20 21:18:08

标签: javascript typescript enums

节点版本: 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中没有找到任何东西,但我觉得有些东西可以让我轻松获得枚举值。

1 个答案:

答案 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])

}