我正在尝试将一维枚举转换为二维枚举。所以代替:
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不支持实际的二维枚举。我还可以使用其他什么数据结构来完成上述语法?强类型输入是必须的。
答案 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)) { }