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