Демистифицируем TypeScript: преобразование значений перечислений в перечисления

Перечисления TypeScript – это мощная функция, позволяющая разработчикам определять набор именованных значений. Однако могут возникнуть ситуации, когда вам потребуется преобразовать значение перечисления обратно в соответствующее перечисление. В этой статье блога мы рассмотрим различные методы выполнения этой задачи с использованием разговорного языка и попутно предоставим примеры кода.

Метод 1: перебор ключей перечисления
Самый простой подход — перебрать ключи перечисления и сравнить их значения с заданным значением перечисления. Вот пример:

enum Color {
  Red,
  Green,
  Blue,
}
function getEnumFromValue(value: number): Color | undefined {
  for (const key in Color) {
    if (Color[key] === value) {
      return Color[key] as Color;
    }
  }
}
const value = 1;
const enumValue = getEnumFromValue(value);
console.log(enumValue); // Output: Green

Метод 2: обратное сопоставление (только числовые перечисления)
Если вы используете числовые перечисления, TypeScript по умолчанию поддерживает обратное сопоставление. Вы можете получить доступ к значению перечисления, используя ключ перечисления. Вот пример:

enum Size {
  Small = 0,
  Medium = 1,
  Large = 2,
}
function getEnumFromValue(value: number): Size | undefined {
  return Size[value];
}
const value = 2;
const enumValue = getEnumFromValue(value);
console.log(enumValue); // Output: Large

Метод 3: использование объекта поиска (перечисления строк или числовые перечисления с пробелами)
В случаях, когда вы используете строковые перечисления или числовые перечисления с пробелами, вы можете создать объект поиска, который сопоставляет значения перечисления с соответствующими им значениями. ключи перечисления. Вот пример:

enum Fruit {
  Apple = 'apple',
  Banana = 'banana',
  Mango = 'mango',
}
const FruitLookup: Record<string, Fruit> = {
  apple: Fruit.Apple,
  banana: Fruit.Banana,
  mango: Fruit.Mango,
};
function getEnumFromValue(value: string): Fruit | undefined {
  return FruitLookup[value];
}
const value = 'banana';
const enumValue = getEnumFromValue(value);
console.log(enumValue); // Output: Banana

Преобразование значений перечислений обратно в перечисления в TypeScript можно выполнить различными методами. Перебирая ключи перечисления, используя обратное сопоставление для числовых перечислений или используя объект поиска, вы можете легко получить соответствующее значение перечисления. Понимание этих методов позволит вам более эффективно работать с перечислениями TypeScript в ваших проектах.