TypeScript: извлечение определений типов из значений перечисления

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

Метод 1: использование typeof
Один простой способ извлечь определения типов из значений перечисления — использовать оператор typeof. Допустим, у нас есть перечисление Colorsс тремя значениями: Red, Greenи Blue. Мы можем извлечь определения типов следующим образом:

enum Colors {
  Red,
  Green,
  Blue,
}
type ColorsType = typeof Colors[keyof typeof Colors];

В этом примере typeof Colorsдает нам тип всего перечисления, а keyof typeof Colorsдает нам объединение ключей из перечисления. Наконец, typeof Colors[keyof typeof Colors]дает нам тип, представляющий значения перечисления.

Метод 2: совместное использование keyof и typeof.
Другой метод предполагает объединение операторов keyofи typeof. Вот как это можно сделать:

enum Sizes {
  Small,
  Medium,
  Large,
}
type SizesType = keyof typeof Sizes;

В этом подходе typeof Sizesдает нам тип самого перечисления, а keyof typeof Sizesдает нам объединение ключей из перечисления, которое по сути представляет значения перечисления.

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

enum Days {
  Monday,
  Tuesday,
  Wednesday,
}
const getEnumValues = <T extends Record<string, number | string>>(e: T): T[keyof T] => {
  return Object.values(e) as T[keyof T];
};
type DaysType = typeof Days[keyof typeof Days];
const days: DaysType[] = getEnumValues(Days);

В этом методе мы определяем функцию getEnumValues, которая принимает перечисление и использует Object.valuesдля извлечения значений в виде массива. Тип возвращаемого значения определяется как T[keyof T], который представляет тип значений перечисления.

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

Не забудьте выбрать метод, который лучше всего соответствует вашему конкретному случаю использования и стилю кодирования. Удачного программирования с перечислениями TypeScript!