Как сделать объект, который работает как перечисление перечислений (перечисление 2D) в TypeScript? - PullRequest
0 голосов
/ 25 февраля 2019

Я пытаюсь преобразовать одномерное перечисление в двумерное.Поэтому вместо:

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 голосов
/ 25 февраля 2019

Вы можете использовать несколько перечислений и поместить их в одно пространство имен.Затем вы также можете объявить псевдоним типа, который является объединением всех перечислений с тем же именем, что и пространство имен:

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)) {  }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...