В 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.