Перечисление enum

Последнее обновление: 15.05.2021

Тип enum или перечисление позволяет определить набор именнованных констант, которые описывают определенные состояния.

Для определения перечисления применяется ключевое слово enum. Например, объявим следующее перечисление:

enum Season { Winter, Spring, Summer, Autumn };

Перечисление называется Season и имеет четыре элемента. Теперь используем перечисление:

enum Season { Winter, Spring, Summer, Autumn };
let current: Season = Season.Summer;
console.log(current);		// 2
current = Season.Autumn; 	// изменение значения

Здесь создается переменная current, которая имеет тип Season. При этом консоль браузера выведет нам число 2 - значение константы Season.Summer.

Числовые перечисления

По умолчанию константы перечисления, как в примере выше, представляют числовые значения. То есть это так называемое числовое перечисление, в котором каждой константе сопоставляется числовое значение.

Так, созданное выше в примере перечисление

enum Season { Winter, Spring, Summer, Autumn };

фактически эквивалентно следующему:

enum Season { Winter=0, Spring=1, Summer=2, Autumn=3 };

Хотя мы можем явным образом переопределить эти значения. Так, мы можем задать значение одной константы, тогда значения следующих констант будет увеличиваться на единицу:

enum Season { Winter=5, Spring, Summer, Autumn };			// 5, 6, 7, 8

Либо можно каждой константе задать свое значение:

enum Season { Winter=4, Spring=8, Summer=16, Autumn=32 };	// 4, 8, 16, 32

Также мы можем получить непосредственно текстовое значение:

enum Season { Winter=0, Spring=1, Summer=2, Autumn=3 };
var current: string = Season[2];	// 2 - числовое значение Summer
console.log(current);	// Summer

Строковые перечисления

Кроме числовых перечислений в TypeScript есть строковые перечисления, константы которых принимают строковые значения:

enum Season { 
	Winter = "Зима", 
	Spring = "Весна",
	Summer = "Лето", 
	Autumn = "Осень" 
};
var current: Season = Season.Summer;
console.log(current);   // Лето

Смешанные гетерогенные перечисления

Также можно определять смешанные перечисления, константы которых могут числа и строки.

enum Season { 
	Winter = 1, 
	Spring = "Весна",
	Summer = 3, 
	Autumn = "Осень" 
};
var current: Season = Season.Summer;
console.log(current);   		// 3
console.log(Season.Autumn);   	// Осень

Перечисления в функциях

Перечисление может выступать в качестве параметра функции.

enum DayTime { 
	Morning, 
	Evening
};
function welcome(dayTime: DayTime){
	
	if(dayTime === DayTime.Morning){
		console.log("Доброе утро");
	}
	else{
		console.log("Добрый вечер");
	}
}
let current: DayTime = DayTime.Morning;
welcome(current);			// Доброе утро
welcome(DayTime.Evening);	// Добрый вечер

Каждая константа перечисления описывает некоторое состояние. И функция welcome() в виде параметра dayTime принимает это состояние и в зависимости от полученного значения выводит на консоль определенное значение.

Однако стоит отметить, что поскольку здесь перечисление DayTime представляет числовое перечисление, то в реальности в функцию welcome() мы можем передать числовые значения:

welcome(1);	// Добрый вечер

Либо даже определить параметр функции как числовой и передавать константы числового перечисления:

enum DayTime { 
	Morning, 
	Evening
};
function welcome(dayTime: number){
	
	if(dayTime === DayTime.Morning){
		console.log("Доброе утро");
	}
	else{
		console.log("Добрый вечер");
	}
}
let current: DayTime = DayTime.Morning;
welcome(current);			// Доброе утро
welcome(DayTime.Evening);	// Добрый вечер

Пример параметра-строкового перечисления:

enum DayTimeMessage { 
	Morning = "Доброе утро", 
	Evening = "Добрый вечер"
};
function welcome(message: DayTimeMessage){
	
	console.log(message);
}
let mes: DayTimeMessage = DayTimeMessage.Morning;
welcome(mes);			// Доброе утро
welcome(DayTimeMessage.Evening);	// Добрый вечер

При использовании строковых перечислений в отличие от числовых мы не можем передать переметру произвольную строку:

welcome("Привет, ты спишь?")

В этом случе компилятор выкатит нам ошибку при компиляции.

В то же время если параметр представляет тип string, то такому параметру можно передавать как строки, так и константы строкового перечисления:

enum DayTimeMessage { 
	Morning = "Доброе утро", 
	Evening = "Добрый вечер"
};
function welcome(message: string){
	
	console.log(message);
}
let mes: DayTimeMessage = DayTimeMessage.Morning;
welcome(mes);			// Доброе утро
welcome(DayTimeMessage.Evening);	// Добрый вечер
Помощь сайту
Юмани:
410011174743222
Перевод на карту
Номер карты:
4048415020898850