Передать / получить несколько значений Enum в Typescript?
Передайте значение, которое является комбинацией значений перечисления, и получите соответствующие строки перечисления.
Вот мой сценарий,
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 ответ
Это может быть сделано либо путем перебора битов, либо путем перебора элементов перечисления. Перебор битов кажется немного чище. Мы пользуемся тем фактом, что 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;
}