В TypeScript перечисления (Enums) обычно содержат либо только числа, либо только строки. Однако, язык позволяет смешивать эти типы в одном перечислении. Это называется гетерогенным Enum (Heterogeneous Enum).
Хотя на практике это используется редко, важно знать синтаксис: вы можете задать одним членам перечисления числовые значения, а другим — строковые. Это может быть полезно при работе с унаследованными данными или специфическими API, где статус может быть выражен и кодом, и строкой. В этом уроке мы разберем, как объявлять такие структуры и какие особенности поведения они имеют при компиляции в JavaScript.
- Модуль 1: Введение в TypeScript
- Модуль 2: Примитивные типы
- Модуль 3: Специальные типы
- Модуль 4: Массивы
- Модуль 5: Кортежи (Tuples)
- Модуль 6: Объекты
- Модуль 7: Функции
- Модуль 8: Union типы
- Модуль 9: Литеральные типы
- Модуль 10: Type Aliases
- Модуль 11: Интерфейсы
- Модуль 12: Type Guards и Narrowing
- Модуль 13: Enums
- Числовые Enums.
- Строковые Enums.
- Гетерогенные Enums.
- const Enums.
- Enum как тип.
- Модуль 14: Классы
- Модуль 15: Generics — основы
- Модуль 16: Generics — ограничения
- Модуль 17: Utility Types — базовые
- Модуль 18: Utility Types — работа с Union
- Модуль 19: Utility Types — функции
- Модуль 20: Type Assertions
- Модуль 21: Keyof и Typeof операторы
- Модуль 22: Mapped Types
- Модуль 23: Conditional Types
- Модуль 24: Discriminated Unions
- Модуль 25: Модули и типы
- Модуль 26: Declaration Files
- Модуль 27: Типизация асинхронного кода
- Модуль 28: Практические паттерны
1. Смешанные значения
В этом задании вам нужно дополнить объявление гетерогенного enum в TypeScript. Гетерогенные enums могут содержать как числовые, так и строковые значения. Присвойте первому элементу числовое значение 1, а второму элементу — строковый литерал 'inactive'. Затем выведите значение первого элемента в консоль, используя корректное обращение к enum. Заполните пропуски в коде, чтобы программа работала корректно и выводила ожидаемый результат.
enum Status {
Active = input1S, // числовое значение
Inactive = input2S // строковый литерал
}
console.log(input3S); // вывести значение Active2. Типы значений
В данном задании представлен гетерогенный enum TypeScript, содержащий как числовые, так и строковые значения. Вам необходимо выделить все значения, которые являются строками. Для этого кликните на каждое строковое значение и выберите тип «Строковое значение» из списка доступных категорий. Обратите внимание, что размечать нужно только сами значения (литералы), а не имена членов enum или другие элементы кода.
enum Status {
Active = 1,
Inactive = {{"INACTIVE"~|~t1}},
Pending = {{"PENDING"~|~t2}},
Cancelled = 0,
Completed = {{"COMPLETED"~|~t3}},
Archived = {{"ARCHIVED"~|~t4}}
}3. Ошибка инициализации
В приведённом фрагменте TypeScript-кода допущена ошибка в объявлении гетерогенного enum. После строкового элемента идёт элемент без инициализации, что запрещено, так как TypeScript не может автоматически вычислить его значение. Найдите и исправьте строку с ошибкой, чтобы enum стал корректным.
enum Status { Active = "ACTIVE", Inactive}4. Классификация Enums
Перед вами несколько определений перечислений (enum) в TypeScript. Распределите их по категориям: 'Числовой', 'Строковый' и 'Гетерогенный'. Обратите внимание, что числовые enum могут иметь явные числовые значения или автоинкрементные, строковые enum имеют строковые значения, а гетерогенные enum содержат как числовые, так и строковые члены. Всего 8 примеров. Каждый элемент должен быть помещен в одну из трех категорий.
enum Direction { Up = 1, Down, Left, Right }enum StatusCode { NotFound = 404, Success = 200 }enum Weekday { Monday = 1, Tuesday, Wednesday }enum Color { Red = "RED", Green = "GREEN" }enum Action { Save = "SAVE", Load = "LOAD" }enum LogLevel { Error = "ERROR", Warn = "WARN" }enum Mixed { No = 0, Yes = "YES" }enum Answer { No = 0, Yes = "YES", Maybe = 2 }5. Доступ к значениям
Проанализируйте приведённый код на TypeScript, содержащий объявление гетерогенного (смешанного) перечисления (enum). Определите, какое значение будет выведено в консоль при обращении к указанному ключу. Обратите внимание на типы значений: числовые и строковые.
enum Status {
Success = 200,
Error = "ERROR",
Pending = 1,
Cancelled = "CANCELLED"
}
console.log(Status.Error);6. Сборка Enum
Соберите гетерогенный enum Status со следующими членами в указанном порядке: Pending (число 0), Approved (число 1), Rejected (строка 'REJECTED'), Cancelled (строка 'CANCELLED'). Используйте только необходимые строки, игнорируя лишние. Гетерогенный enum в TypeScript может содержать как числовые, так и строковые значения, но порядок членов в данном задании фиксирован.
enum Status { Pending = 0, Approved = 1, Rejected = "REJECTED", Cancelled = "CANCELLED"}enum AnotherEnum { Invalid = 0.5, Done = 2, Waiting = 3,console.log(Status.Pending);