如何在TypeScript中使对象像枚举(2D枚举)一样工作?

时间:2019-02-25 07:42:56

标签: typescript enums

我正在尝试将一维枚举转换为二维枚举。所以代替:

import FEATURES from 'enums/features'
if (isEnabled(FEATURES.ALLOW_FILTERING)) { ... }
if (isEnabled(FEATURES.HIGHLIGHT_ROWS)) { ... }
if (isEnabled(FEATURES.NEW_SIGNUP_FORM)) { ... }

我想这样做:

import FEATURES from 'enums/features'
if (isEnabled(FEATURES.TABLES.ALLOW_FILTERING)) { ... }
if (isEnabled(FEATURES.TABLES.HIGHLIGHT_ROWS)) { ... }
if (isEnabled(FEATURES.ONBOARDING.NEW_SIGNUP_FORM)) { ... }

当然,TypeScript不支持实际的二维枚举。我还可以使用其他什么数据结构来完成上述语法?强类型输入是必须的。

1 个答案:

答案 0 :(得分:3)

您可以使用多个枚举并将它们放在单个命名空间中。然后,您还可以声明类型别名,该别名是与名称空间同名的所有枚举的并集:

export namespace FEATURES {
    export enum TABLES {
        ALLOW_FILTERING,
        HIGHLIGHT_ROWS
    }
    export enum ONBOARDING {
        NEW_SIGNUP_FORM
    }
}

export type FEATURES  = FEATURES.ONBOARDING | FEATURES.TABLES

function isEnabled(v: FEATURES) : boolean { return true }


if (isEnabled(FEATURES.TABLES.ALLOW_FILTERING)) {  }
if (isEnabled(FEATURES.TABLES.HIGHLIGHT_ROWS)) {  }
if (isEnabled(FEATURES.ONBOARDING.NEW_SIGNUP_FORM)) {  }