В этом руководстве вы узнаете о типе перечисления Enum в TypeScript и о том, как его эффективно использовать.
Что такое перечисление
Перечисление — это группа именованных постоянных значений. Enum означает перечисляемый тип.
Чтобы определить перечисление, выполните следующие действия:
- Сначала используйте ключевое слово
enum
, за которым следует имя перечисления. - Затем определите постоянные значения для перечисления.
Ниже показан синтаксис для определения перечисления:
enum name {constant1, constant2, ...};
В этом синтаксисе constant1
, constant2
и т. д. также известны как члены перечисления.
Пример типа перечисления TypeScript
В следующем примере создается перечисление, представляющее месяцы года:
enum Month { Jan, Feb, Mar, Apr, May, Jun, Jul, Aug, Sep, Oct, Nov, Dec };
В этом примере имя перечисления — Month
, а постоянные значения — Jan
, Feb
, Mar
и т. д.
Далее объявляется функция, использующая перечисление Month
в качестве типа параметра month
:
function isItSummer(month: Month) { let isSummer: boolean; switch(month) { case Month.Jun: case Month.Jul: case Month.Aug: isSummer = true; break; default: isSummer = false; break; } return isSummer; }
И вы можете назвать это так:
console.log(isItSummer(Month.Jun)); // true
В этом примере используются постоянные значения, включая Jan
, Feb
, Mar
, … в перечислении, а не магические значения, такие как 1
, 2
, 3
,… Это делает код более очевидным.
Как работает перечисление TypeScript
Хорошей практикой является использование в коде постоянных значений, определенных перечислениями.
Однако в следующем примере функции isItSummer()
передается число вместо перечисления. И это работает.
console.log(isItSummer(6)); // true
В этом примере используется число( 6
) вместо константы, определяемой перечислением Month
.
Давайте проверим сгенерированный Javascript-код перечисления Month:
И вы можете вывести в консоль переменную Month
:
{ '0': 'Jan', '1': 'Feb', '2': 'Mar', '3': 'Apr', '4': 'May', '5': 'Jun', '6': 'Jul', '7': 'Aug', '8': 'Sep', '9': 'Oct', '10': 'Nov', '11': 'Dec', Jan: 0, Feb: 1, Mar: 2, Apr: 3, May: 4, Jun: 5, Jul: 6, Aug: 7, Sep: 8, Oct: 9, Nov: 10, Dec: 11 }
Как видно из вывода, перечисление TypeScript — это объект в JavaScript. Этот объект имеет именованные свойства, объявленные в перечислении. Например, Jan
— это 0
, а Feb
— это 1
.
Сгенерированный объект также имеет числовые ключи со строковыми значениями, представляющими именованные константы.
Вот почему вы можете передать число в функцию, которая принимает перечисление. Другими словами, член перечисления является одновременно числом и определенной константой.
Указание номеров членов перечисления
TypeScript определяет числовое значение члена перечисления на основе порядка этого члена, который появляется в определении перечисления. Например, Jan
принимает 0, Feb
получает 1 и т. д.
Можно явно указать числа для членов перечисления следующим образом:
enum Month { Jan = 1, Feb, Mar, Apr, May, Jun, Jul, Aug, Sep, Oct, Nov, Dec };
В этом примере константа Jan
принимает значение 1 вместо 0. Feb
принимает значение 2, а Mar
принимает значение 3 и т. д.
Когда использовать перечисление
Вы должны использовать перечисление, когда вы:
- Имейте небольшой набор фиксированных значений, которые тесно связаны
- И эти значения известны во время компиляции.
Например, вы можете использовать перечисление для статуса утверждения:
enum ApprovalStatus { draft, submitted, approved, rejected };
Затем вы можете использовать перечисление ApprovalStatus
следующим образом:
const request = { id: 1, status: ApprovalStatus.approved, description: 'Please approve this request' }; if(request.status === ApprovalStatus.approved) { // send an email console.log('Send email to the Applicant...'); }
Резюме
- Перечисление TypeScript — это группа постоянных значений.
- Перечисление — это объект JavaScript с именованными свойствами, объявленными в определении перечисления.
- Используйте перечисление, когда у вас есть небольшой набор фиксированных значений, которые тесно связаны и известны во время компиляции.