Задать вопрос
SanviInvi
@SanviInvi

Как оформлять и использовать перечисления и типы в ts?

Привет. При написание имени перечисления, я загуглил, как его правильно оформить, пишут разное, использовать для перечислений "Screaming Snake Case" (ENUM), использовать множественное число Enums, использовать обычное название Enum, но писать тип в формате EnumType или TEnum. Но чаще встречается вариант с использованием одного и того же имени Enum в обоих случаях.

В качестве примера, создал 2 файла, один с перечислением и типами другой с использованием этих сущностей.
// types.ts

export const Enum = {
  a: 'a',
  b: 'b',
} as const;

export type Enum = typeof Enum[keyof typeof Enum];

// functions.ts

import { Enum } from './test.js';

function fn(areas: Enum): Enum {
  switch (areas) {

    case Enum.a:
      return Enum.a;

    case Enum.b:
    default:
      return Enum.b;
  }
}

Какие форматы названий используете вы? А если там еще интерфейс, то писать IEnum? А если схема из zod, то писать EnumSchema? Тогда почему I идет вначале, а Schema в конце?
export const Enum = {
  a: 'a',
  b: 'b',
} as const;

export const EnumSchema = z.enum(Enum);

И вопрос по zod, если планируется его использовать в проекте и в других местах, то нормально ли писать сразу так?
// export type Enum = typeof Enum[keyof typeof Enum];
export type Enum = z.infer<typeof Enum>;

P.S. использую const as const, т.к:
На TSConf 2020: TalkScript with the TypeScript Team создателями TS было сказано примерно следующее: - вам следует избегать перечислений в TypeScript. Они являются ошибкой языка (как отметили создатели), поскольку противоречат целям TypeScript как системы типов и не вносят дополнительных функций во время выполнения. Мы также глубоко верим в обратную совместимость. Мы никогда не отменим то, что уже внедрили.
  • Вопрос задан
  • 92 просмотра
Подписаться 1 Простой 6 комментариев
Помогут разобраться в теме Все курсы
  • Skillbox
    Курс по TypeScript
    3 месяца
    Далее
  • Merion Academy
    Онлайн-курс по TypeScript
    2 месяца
    Далее
  • Учебный центр IBS
    WEB-015 Язык программирования TypeScript
    1 неделя
    Далее
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы