yomoyo
yomoyo copied to clipboard
[intensive] [js3] спорный словарь const Type вместо enum
Ссылка https://up.htmlacademy.ru/react/11/demos/9617#10
Проблема, вопрос, предложение Файл data.js
Мне кажется спорным вариант создания объекта с именем Type (const Type
). Сюда же просится enum
.
Возможное решение
enum ProductStatus= {
SALE = 'Сейл',
NEW = 'Нью',
};
Я не могу посмотреть демку, поэтому недопонимаю как сейчас. Но сами enum
ы, по моему мнению, мусор и антипаттерн TypeScript
а.
Точнее это не только моё мнение, у евангелиста TypeScript
а @mattpocock было хорошее видео по этому поводу:
То есть, если у нас нет какого-то синтетического теста, которому подойдут только enum
ы, то во всех реальных задачах вместо enum
ов можно использовать что-то другое:
- Нам нужны статус коды виде чисел, но чтобы при разработке были читаемые имена, и при этом мы контролируем среду исполнение (компилятор)? Наш выбор
const enum
- Нам нужно просто захардкодить несколько строк в качестве возможных значений? Ну тогда обычный
Union Type
покрывает все наши потребности:type ProductStatus = 'Сейл' | 'Нью';
- Нам нужно итерироваться по значением зачем-то (например, чтобы сгенирировать документацию). Ну тогда можно сделать либо массив, либо объект
as const
// const array example const PRODUCT_STATUSES = ['Сейл', 'Нью'] as const; type ProductStatus = typeof PRODUCT_STATUSES[number]; // ^ аналогично `type ProductStatus = "Сейл" | "Нью"`
// const object example const ProductStatus = { SALE: 'Сейл', NEW: 'Нью', } as const; type ProductStatusKey = keyof typeof ProductStatus; // "SALE" | "NEW" type ProductStatusValue = typeof ProductStatus[ProductStatusKey]; // "Сейл" | "Нью"
И все из них проще и понятнее чем обычные enum
ы. Рассказывать студентам что сами enum
ы существует стоит, но лучше советовать их не использовать.