Передать / получить несколько значений Enum в Typescript? - PullRequest
0 голосов
/ 11 октября 2018

Передайте значение, которое является комбинацией значений перечисления, и получите соответствующие строки перечисления.

Вот мой сценарий,

enum EnumDays {
    NONE = 0,
    SUN = 1,
    MON = 2,
    TUE = 4,
    WED = 8,
    THU = 16,
    FRI = 32,
    SAT = 64,
    ALL = 127
}

Я передам значение как 5,которая является комбинацией SUN & TUE (1 + 4 = 5).

Я хочу получить "SUN" и "TUE" в качестве результата.Как этого добиться?

1 Ответ

0 голосов
/ 12 октября 2018

Это может быть сделано либо с помощью перебора битов, либо с помощью перебора элементов перечисления.Перебор битов кажется немного чище.Мы используем тот факт, что EnumDays отображает значения в ключи (например, 1 до SUN), а также ключи в значения (SUN до 1).(Nit: этот подход не найдет значение enum, равное 2147483648. 1 << 31, то есть -2147483648, будет работать.)

function getDayNames(value: EnumDays) {
    let names = [];
    for (let bit = 1; bit != 0; bit <<= 1) { 
        if ((value & bit) != 0 && bit in EnumDays) { 
            names.push(EnumDays[bit]);
        }
    }
    return names;
}
...