Преобразование строк TypeScript в перечисления: подробное руководство

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

Метод 1: использование оператора Switch
Один из самых простых способов преобразования строки в перечисление в TypeScript — использование оператора переключателя. Этот метод включает в себя создание оператора переключения, который сравнивает входную строку с каждым значением перечисления и возвращает соответствующее значение перечисления, если совпадение найдено. Вот пример:

enum Color {
  Red = "red",
  Green = "green",
  Blue = "blue",
}
function convertStringToEnum(input: string): Color | undefined {
  switch (input) {
    case "red":
      return Color.Red;
    case "green":
      return Color.Green;
    case "blue":
      return Color.Blue;
    default:
      return undefined;
  }
}
const color: Color | undefined = convertStringToEnum("red");
console.log(color); // Output: Color.Red

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

enum Color {
  Red = "red",
  Green = "green",
  Blue = "blue",
}
const stringToEnumMapping: { [key: string]: Color } = {
  red: Color.Red,
  green: Color.Green,
  blue: Color.Blue,
};
function convertStringToEnum(input: string): Color | undefined {
  return stringToEnumMapping[input];
}
const color: Color | undefined = convertStringToEnum("green");
console.log(color); // Output: Color.Green

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

enum Color {
  Red = "red",
  Green = "green",
  Blue = "blue",
}
function convertStringToEnum<T extends Record<string, string>>(
  input: string,
  enumObject: T
): T[keyof T] | undefined {
  const enumValues = Object.values(enumObject);
  if (enumValues.includes(input)) {
    return input as T[keyof T];
  }
  return undefined;
}
const color: Color | undefined = convertStringToEnum("blue", Color);
console.log(color); // Output: Color.Blue

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