Демистификация и освоение перечислений в TypeScript
Перечисления, также известные как перечисления, представляют собой определенные константы, которые можно использовать в любом месте кода. Они относительно просты для понимания.
Как определить перечисления?
Перечисления могут быть определены в Typescript с помощью ключевого слова enum
. Вот как мы можем определить его:
enum Languages {
English,
Spanish,
French,
German
}
По умолчанию каждому из них будет присвоено значение. Таким образом, английский будет равен 0, испанский – 1 и так далее. Чтобы использовать эти значения в коде, мы можем просто сослаться на них с помощью ‹EnumName.PropertyName›:
// Before enum console.log(1); // 1
// After enumconsole.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 перечисления — это очень мощный способ добавить семантику в вашу кодовую базу. Это помогает коллегам-разработчикам легко понять ваш код и узнать, что он делает. Это также помогает в ремонтопригодности и помогает масштабировать, если в будущем будут добавлены какие-либо другие ценности. Я надеюсь, что эта статья была полезной.
Удачного кодирования!