#typescript
#typescript
Вопрос:
У меня есть следующая строка enum:
enum QuotationProgress {
Designing = 'designing',
QuoteSent = 'quoteSent',
QuoteAccepted = 'quoteAccepted',
Installed = 'installed',
Done = 'done',
}
Он описывает процесс, поэтому Designing
перед QuoteSent
, и так далее. Я хотел бы сделать что-то вроде:
function(currentState, someState) {
if (someState < currentState) {
return 'some state is in the past'
}
}
Какой хороший способ добавить эту информацию о порядке в enum?
Комментарии:
1. Перечисления TS сохраняются во время выполнения через объекты, что позволяет повторять их в порядке определения свойств.
2. какую версию TS вы используете? Недавно был анонсирован TS 3.4, и, возможно, const assertions — это то, что вы ищете
Ответ №1:
Перечисления в TypeScript на самом деле не являются расширяемыми. Я бы посоветовал вам хранить любую дополнительную информацию в структуре данных рядом с перечислением.
Вот как вы могли бы добавить порядок в виде отдельной структуры данных:
const quotationProgressOrder: Record<QuotationProgress, number> = {
[QuotationProgress.Designing]: 0,
[QuotationProgress.QuoteSent]: 1,
[QuotationProgress.QuoteAccepted]: 2,
[QuotationProgress.Installed]: 3,
[QuotationProgress.Done]: 4,
}
function f(currentState: QuotationProgress, someState: QuotationProgress) {
if (quotationProgressOrder[someState] < quotationProgressOrder[currentState]) {
return 'some state is in the past'
}
}
В зависимости от вашего варианта использования этого может быть достаточно. Или вы можете обнаружить, что хотите создать свой собственный объект, подобный перечислению, который содержит всю информацию, и полностью забыть об использовании enum
.
Надеюсь, это поможет. Удачи!