Привет. При написание имени перечисления, я загуглил, как его правильно оформить, пишут разное, использовать для перечислений "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 как системы типов и не вносят дополнительных функций во время выполнения. Мы также глубоко верим в обратную совместимость. Мы никогда не отменим то, что уже внедрили.