= "DRAFT" | "NEW" | "APPROVED"
превратить в
enum OrderStatus = {
DRAFT = 'DRAFT',
NEW = 'NEW',
APPROVED = 'APPROVED'
}
?
Лучше по возможности использовать type вместо enum
с type всё здорово, но здесь на самом деле 100500 статусов. И удобнее всего проверять следующим образом: ['DRAFT', 'NEW'].includes(this.status) А тут редактор не подсказывает ничего, пока не наведёшь на this.status. Не слишком удобно
И что не так?
когда пишешь 'DRAFT', 'NEW' - приходится делать это целиком и полностью ручками. Хотелось бы, чтоб редактор помогал :)
в чём помогал?
почему?
потому что enum'ы придумали для конкретных вещей, для которых они подходят идеально. а там, где не подходят, их лучше не использовать
Например есть код: type OrderStatus = 'DRAFT' | 'NEW' | 'APPROVED' const res = ['NEW', 'APPROVED'].includes(this.status) в какой-то момент кто-нибдуь решает сделать не 'APPROVED', а 'APPROVE' и код const res = ['NEW', 'APPROVED'].includes(this.status) уже не вызывает ошибок typescript
И вынести конструкцию ['DRAFT', 'NEW'].includes(this.status) Внутрь функции, тогда будет подксказывать
а для каких вещей они подходят?
воспринимай enum'ы как "богатый boolean" везде, где тебе подошёл бы boolean, но нужно больше двух вариантов (true и false), ты можешь использовать enum. это и есть его назначение
const check = (list: OrderStatus[], status: OrderStatus) => list.includes(status);
а чем OrderStatus не богатый енум?
это тип. а enum – это тип И значение
так булеан тоже не тип и значение :D
ты не понял идею или подкалываешь меня? жарко, голова не варит – не могу уловить
окей, допустим я гружу что-нибудь, ставлю loading = true потом понимаю, что этого мало, и заменяю на loadingStatus = 'loading' это тип или енум?
так можно
не, я в тс только вхожу, а тут и так с типами и интерфейсами хватает способов делать одно и то же, пытаюсь разобраться
enum это то что объявлено как enum, а ты в пример приводишь просто строку
строковый юнион очень близок по идее к енумам. но енумы в этом случае просто удобнее – это енум с уже описанным значением. импортируешь и используешь – не надо лезть в исходники и смотреть, какие варианты есть у юниона
Спасибо, крутое решение!
понял, спасибо ❤️
enum легче рефакторить - значение в одном месте поменял все
Обсуждают сегодня