Как использовать Enum в TypeScript

Как использовать Enum в TypeScript Рисунок 1

Enum предоставляет способ представления фиксированного набора значений в виде константы. Они могут помочь вам написать более впечатляющий код и задокументировать свой собственный, дав понятные имена конкретным значениям.

Создать перечисление

Enum обычно представляет некоторый фиксированный выбор предоставленного значения. Например, перечисление, представляющее основные цвета, может содержать фиксированные значения для красного, желтого и синего.

Enum представляет данные в виде пары ключ/значение, называемой элементом enum (компонент). Этот ключ всегда должен быть строкой. Однако значение, которое по умолчанию является автоматически увеличивающимся числом, может быть числовым, строковым или вычисляемым.

Вы можете создавать перечисления на языке TypeScript, используя ключевое слово enum. За ним следует имя перечисления и пара фигурных скобок ({}), содержащих элементы перечисления. Общепринятое соглашение об именах в JavaScript гласит, что имена перечислений должны начинаться с заглавной буквы.

перечисление Направление {Вверх, Вниз, Влево, Вправо}

Этот пример включает перечисление с именем Direction . В этом перечислении есть член, представляющий каждое направление: вверх, вниз, влево и вправо.

Поскольку этот код не определяет значение для каждой клавиши, TypeScript автоматически присвоит значение. Первый компонент – Up имеет значение 0. Остальные компоненты в свою очередь будут иметь значение больше 1 по сравнению с количеством предыдущих компонентов. Вы можете явно объявить это, если вам трудно запомнить:

enum Направление {Вверх = 0, Вниз = 1, Влево = 2, Вправо = 3, }

Или вы можете объявить другие значения, оставив необъявленные значения продолжать увеличиваться, как и раньше:

enum Status { Active = 9, Inactive, // 10 }

В этом примере элемент Inactive имеет значение 10. Эта операция применяется к перечислениям, которые имеют только числовые значения, а не строковые или гетерогенные элементы.

Различные типы перечислений

Перечисления в TypeScript имеют неявный тип, основанный на типе значения, которое содержат их элементы. Наиболее распространенным типом является числовое перечисление, которое имеет два варианта.

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

Строковое перечисление — это перечисление, все элементы которого являются строками. В отличие от числовых перечислений, где значения распределяются автоматически, вы должны инициализировать каждый элемент строкой:

enum PrimaryColors { Красный = “КРАСНЫЙ”, Желтый = “ЖЕЛТЫЙ”, Синий = “СИНИЙ” }

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

Enum не является однородным

Гетерогенное перечисление — это перечисление, содержащее как числовые, так и строковые элементы. Например:

enum PrimaryColors { Красный = “КРАСНЫЙ”, Желтый = “ЖЕЛТЫЙ”, Синий = “СИНИЙ” }

Гетерогенные перечисления полезны, когда у вас есть элементы перечисления, которым требуется другой тип значения в зависимости от контекста или конкретного значения каждого элемента. Однако документация по TypeScript не рекомендует использовать разнородные перечисления, поскольку они создают сложность, которая может сделать ваш код более подверженным ошибкам.

Элементы перечисления являются вычисляемыми и постоянными

Каждый элемент emum имеет значение, которое может быть постоянным или вычисляемым.

Постоянный компонент перечисления

Элемент перечисления остается неизменным, если он удовлетворяет любому из следующих условий.

  1. Первый элемент перечисления и никаких инициализаторов.
  2. Без инициализатора предыдущее перечисление было константой.
  3. Инициализируется константным выражением перечисления.

Согласно документации TypeScript, константное выражение enum — это подмножество выражений TypeScript, которое можно полностью вычислить во время компиляции. Например, строка или цифра.

Например, все элементы перечисления в приведенном ниже блоке кода являются постоянными:

enum Direction { Up, Down, Left, Right } // CASE 2 enum Weekday { Monday = 1, вторник, среда, четверг, пятница } // CASE 3 enum Season { Spring = “ВЕСНА”, Summer = “ЛЕТО”, Autumn = “ОСЕНЬ”, Зима = “ЗИМА” }

При преобразовании постоянных членов перечисления в обычный JavaScript сгенерированный код будет использовать их литеральные значения. Это может повысить производительность и упростить отладку.

Например, вот переведенная версия перечисления Season:

переменный сезон; (функция (Сезон) { Сезон(“Весна”) = “ВЕСНА”; Сезон(“Лето”) = “ЛЕТО”; Сезон(“Осень”) = “ОСЕНЬ”; Сезон(“Зима”) = “ЗИМА”; })(Сезон || (Сезон = {}));

Компонент вычисляемого перечисления

Вы можете использовать вычисляемые элементы перечисления для выделения значений элементам перечисления на основе выражений или других динамических вычислений. Например:

enum Size { Маленький = 1, Средний = calculateSize (12), Большой = calculateSize (5) } function calculateSize (значение: число): число { возвращаемое значение * 5; } console.log(Размер.Большой)

Enum Size имеет 3 компонента: Small, Medium и Large. Он явно присваивает значение 1 члену Small. Элементы Medium и Large используют функцию Size для вычисления своих значений во время выполнения.

При работе с вычисляемыми перечислениями важно записывать значения, неизвестные до времени выполнения. Это может добавить сложности и потенциальных ошибок во время выполнения по сравнению с элементами перечисления, содержащими постоянные значения.

Например:

переменная Размер; (функция (Размер) {Размер(Размер(“Малый”) = 1) = “Малый”; Размер(Размер(“Средний”) = calculateSize(12)) = “Средний”; Размер(Размер(“Большой”) = calculateSize(5)) = “Большой”; })(Размер || (Размер = {})); console.log(Размер.Большой)

Приведенный выше блок кода представляет собой перекодированную версию перечисления Size. Обратите внимание, что TypeScript не включает возвращаемые значения из calculateSize() в код JavaScript(). Вместо этого он включает вызов исходной функции, чтобы JavaScript определял значение во время выполнения.

Доступ к значениям перечисления

Вы можете получить доступ к значениям числового компонента, используя точечную нотацию объекта.

Например:

enum Direction { Вверх = 0, Вниз = 1, Влево = 2, Вправо = 3, } console.log(Direction.Left) // 2

Инвертировать отображение чисел перечисления

Инвертировать отображение в числовом перечислении, которое ссылается на выборку соответствующего имени элемента перечисления из его значения. Это может быть особенно полезно при работе с числовыми значениями, которые нужно декодировать.

По умолчанию значения перечисления в TypeScript сопоставляются, то есть вы можете получить доступ только к значению, связанному с именем. Однако вы можете самостоятельно изменить сопоставление, чтобы получить перечисление на основе его значения.

Например:

enum Direction { Вверх = 1, Вниз, Влево, Вправо } function getDirectionName(directionValue: number): string { // Обратное отображение const directionName = Direction(directionValue); вернуть имя направления; } console.log(getDirectionName(1)); // “Вверх” console.log(getDirectionName(3)); // “Левый”

Функция getDirectionName реализует обратное отображение, обращаясь к имени элемента перечисления с его значением в качестве индекса. Эта функция принимает в качестве аргумента directionValue и извлекает имя соответствующего элемента перечисления с помощью Direction(directionValue) .

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

Вот что вам нужно знать об использовании перечислений в TypeScript. Надеюсь, статья будет вам полезна.

Похожие записи

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *