Изучение TypeScript: сопоставление ключей перечисления с парами «ключ-значение» интерфейса

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

Метод 1: сопоставление вручную
Один простой подход — вручную создать объект, который сопоставляет каждый ключ перечисления с соответствующим значением. Давайте рассмотрим пример, где у нас есть перечисление под названием «Цвет» с тремя возможными значениями: красный, зеленый и синий. Мы можем сопоставить эти ключи перечисления с интерфейсом под названием «ColorMap» следующим образом:

enum Color {
  Red = "RED",
  Green = "GREEN",
  Blue = "BLUE",
}
interface ColorMap {
  [key: string]: Color;
}
const colorMap: ColorMap = {
  "RED": Color.Red,
  "GREEN": Color.Green,
  "BLUE": Color.Blue,
};

Метод 2: использование Object.entries()
Мы можем использовать метод Object.entries()для перебора перечисления и динамического создания сопоставления ключ-значение. Вот пример:

enum Color {
  Red = "RED",
  Green = "GREEN",
  Blue = "BLUE",
}
interface ColorMap {
  [key: string]: Color;
}
const colorMap: ColorMap = Object.fromEntries(
  Object.entries(Color).filter(([key]) => isNaN(Number(key)))
);

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

enum Color {
  Red = "RED",
  Green = "GREEN",
  Blue = "BLUE",
}
interface ColorMap {
  [key: string]: Color;
}
function createEnumMap<T>(enumObject: T): {[key: string]: T[keyof T]} {
  return Object.fromEntries(
    Object.entries(enumObject).filter(([key]) => isNaN(Number(key)))
  );
}
const colorMap: ColorMap = createEnumMap(Color);

Сопоставление ключей перечисления с парами «ключ-значение» интерфейса в TypeScript может быть достигнуто с помощью различных методов, таких как сопоставление вручную, использование Object.entries()или создание служебных функций. Эти подходы обеспечивают гибкость и позволяют динамически создавать сопоставления на основе определений перечисления. Используя эти методы, вы можете эффективно работать с перечислениями и парами «ключ-значение» интерфейса в проектах TypeScript.