Демистификация и освоение перечислений в TypeScript

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

Как определить перечисления?

Перечисления могут быть определены в Typescript с помощью ключевого слова enum. Вот как мы можем определить его:

enum Languages {
    English,
    Spanish,
    French,
    German
}

По умолчанию каждому из них будет присвоено значение. Таким образом, английский будет равен 0, испанский – 1 и так далее. Чтобы использовать эти значения в коде, мы можем просто сослаться на них с помощью ‹EnumName.PropertyName›:

// Before enum
console.log(1); // 1
// After enum
console.log(Languages.Spanish); // 1

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

Зачем использовать перечисления?

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

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

Перечисления не всегда начинаются с 0. Мы можем определить перечисления как числа во время инициализации. Давайте рассмотрим их немного подробнее.

enum Languages {
    English = 3,
    Spanish,
    French,
    German
}

Выше мы присвоили английскому числовое значение 3. Каждый элемент после этого будет увеличиваться на 1, поэтому испанский становится 4, французский становится 5 и т. д.

Кроме того, вы также можете просто определить их по своему усмотрению:

enum Languages {
    English = 3,
    Spanish = 10,
    French = 23,
    German = 33
}

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

Обычно мы не смешиваем строки и числа в Enums, чтобы избежать путаницы. Но мы также можем определить перечисления как полностью строки:

enum TimeZones {
    India = "IST",
    UK = "GMT",
    Ukraine = "EET"
}
console.log(TimeZones.India) // IST

Использование функций в качестве значений Enum

Мы можем сделать больше с перечислениями! Они также могут быть значениями функции. Но есть одна загвоздка. Если вы определяете только одно значение как функцию в перечислении, функции должны идти в конце для всех значений. В противном случае он выдаст ошибку.

const getTimezoneForIndia = function() {
    return 'IST';
}
enum TimeZones {
    India = getTimezoneForIndia(),
    UK,
    Ukraine,
}
// Error - UK, Ukraine will return undefined

Причина получения ошибки заключается в том, что TypeScript ожидает, что каждое свойство будет значением функции, поскольку мы использовали его для первой записи. Вот еще случай. Когда вы определяете функцию для последнего Enum, мы не получим ошибку:

const getTimezoneForUkraine = function() {
    return 'EET';
}
enum TimeZones {
    India,
    UK,
    Ukraine = getTimezoneForUkraine(),
}

В приведенном выше перечислении Индия возвращает 0, Великобритания возвращает 1, а Украина возвращает значение getTimezoneForUkraine().

Вычисляемые перечисления

Вот еще один интересный вариант использования. Перечисления также могут быть вычислены (т.е. любая арифметическая операция может использоваться как значение перечисления):

enum Languages {
    English = 1 + 1,   // Returns "2"
    Spanish = 1 * 5,   // Returns "5"
    French  // Returns "6"
}

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

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

enum IndianLanguages {
    Hindi: Languages.English, // returns Languages.English, i.e. "2"
    Tamil: 1 + 5,         // Calculates and returns "6"
    Malayalam: 1 * 5,     // Calculates and returns "5"
    Telugu: Hindi         // Refers to AnotherEnum.One, returns "2"
}

Заключение

В TypeScript перечисления — это очень мощный способ добавить семантику в вашу кодовую базу. Это помогает коллегам-разработчикам легко понять ваш код и узнать, что он делает. Это также помогает в ремонтопригодности и помогает масштабировать, если в будущем будут добавлены какие-либо другие ценности. Я надеюсь, что эта статья была полезной.

Удачного кодирования!