Гетерогенные Enums

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

Тренажер по TypeScript

В TypeScript перечисления (Enums) обычно содержат либо только числа, либо только строки. Однако, язык позволяет смешивать эти типы в одном перечислении. Это называется гетерогенным Enum (Heterogeneous Enum).

Хотя на практике это используется редко, важно знать синтаксис: вы можете задать одним членам перечисления числовые значения, а другим — строковые. Это может быть полезно при работе с унаследованными данными или специфическими API, где статус может быть выражен и кодом, и строкой. В этом уроке мы разберем, как объявлять такие структуры и какие особенности поведения они имеют при компиляции в JavaScript.

Список тем

1. Смешанные значения

id: 40695_ts_hetero_enum_01

В этом задании вам нужно дополнить объявление гетерогенного enum в TypeScript. Гетерогенные enums могут содержать как числовые, так и строковые значения. Присвойте первому элементу числовое значение 1, а второму элементу — строковый литерал 'inactive'. Затем выведите значение первого элемента в консоль, используя корректное обращение к enum. Заполните пропуски в коде, чтобы программа работала корректно и выводила ожидаемый результат.

Заполните пропуски
enum Status {
  Active = input1S, // числовое значение
  Inactive = input2S // строковый литерал
}

console.log(input3S); // вывести значение Active
Сообщения
Проверить
Показать решение на 3 сек.
Показать подсказку

2. Типы значений

id: 40695_ts_hetero_enum_02

В данном задании представлен гетерогенный enum TypeScript, содержащий как числовые, так и строковые значения. Вам необходимо выделить все значения, которые являются строками. Для этого кликните на каждое строковое значение и выберите тип «Строковое значение» из списка доступных категорий. Обратите внимание, что размечать нужно только сами значения (литералы), а не имена членов enum или другие элементы кода.

Кликните по каждому выделенному фрагменту и выберите для него подходящий тип из списка под текстом.
enum Status {
    Active = 1,
    Inactive = {{"INACTIVE"~|~t1}},
    Pending = {{"PENDING"~|~t2}},
    Cancelled = 0,
    Completed = {{"COMPLETED"~|~t3}},
    Archived = {{"ARCHIVED"~|~t4}}
}
Строковое значение
Сообщения
Проверить
Показать подсказку

3. Ошибка инициализации

id: 40695_ts_hetero_enum_03

В приведённом фрагменте TypeScript-кода допущена ошибка в объявлении гетерогенного enum. После строкового элемента идёт элемент без инициализации, что запрещено, так как TypeScript не может автоматически вычислить его значение. Найдите и исправьте строку с ошибкой, чтобы enum стал корректным.

Найдите ошибку и исправьте
enum Status {
  Active = "ACTIVE",
  Inactive
}
Сообщения
Проверить
Показать решение на 3 сек.
Показать подсказку

4. Классификация Enums

id: 40695_ts_hetero_enum_04

Перед вами несколько определений перечислений (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. Доступ к значениям

id: 40695_ts_hetero_enum_05

Проанализируйте приведённый код на TypeScript, содержащий объявление гетерогенного (смешанного) перечисления (enum). Определите, какое значение будет выведено в консоль при обращении к указанному ключу. Обратите внимание на типы значений: числовые и строковые.

Выберите правильный вариант ответа
enum Status {
    Success = 200,
    Error = "ERROR",
    Pending = 1,
    Cancelled = "CANCELLED"
}

console.log(Status.Error);
Сообщения
Проверить
Показать подсказку

6. Сборка Enum

id: 40695_ts_hetero_enum_06

Соберите гетерогенный 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);
Сообщения
Проверить
Показать решение на 3 сек.
Показать подсказку

TypeScript: компиляция и запуск

id: 40695_compiler

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

TS
Запустить тренажёр (TypeScript)
НайтиКурс.Ру