Строковые Enums

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

Тренажер по TypeScript

В TypeScript строковые перечисления (String Enums) позволяют задавать понятные строковые значения для набора констант. В отличие от числовых перечислений, строковые enum не имеют автоинкремента, поэтому каждый член должен быть инициализирован явно.

Основное преимущество строковых Enums — читаемость при отладке и сериализации. Если вы выведете значение в консоль или сохраните в базу данных, вы увидите понятную строку (например, "UP"), а не абстрактное число.

Синтаксис выглядит так:

enum Direction {
Up = "UP",
Down = "DOWN"
}

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

Список тем

1. Объявление строкового Enum

id: 40694_se_01_syntax

В этом задании вам предстоит дополнить объявление строкового перечисления (enum) в TypeScript. Код объявляет перечисление `Role` с двумя ключами: ADMIN и USER. Необходимо инициализировать каждый ключ строковым значением, чтобы получить корректный строковый enum. Обратите внимание на комментарий в коде, который указывает требуемые значения. Заполните пропуски соответствующими строковыми литералами, соблюдая синтаксис TypeScript.

Заполните пропуски
enum Role {
  ADMIN = input1S,
  USER = input2S
}

// Используйте значения "admin" и "user"
Сообщения
Проверить
Показать решение на 3 сек.
Показать подсказку

2. Присвоение значения

id: 40694_se_02_usage

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

Нужно правильно расставить в пропуски предложенные варианты
enum Direction {
  North = "North",
  South = "South",
  East = "East",
  West = "West"
}

function getDirectionMessage(dir: Direction): string {
  return `You are heading ${dir}`;
}

console.log(getDirectionMessage(input1S));
console.log(getDirectionMessage(input2S));
Сообщения
Проверить
Показать решение на 3 сек.
Показать подсказку

3. Значение в Runtime

id: 40694_se_03_output

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

Выберите правильный вариант ответа
enum MyEnum {
  A = "Apple",
  B = "Banana"
}

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

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

id: 40694_se_04_mixed

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

Найдите ошибку и исправьте
enum Direction {
  Up = "UP",
  Down,   // Ошибка здесь
  Left = "LEFT",
  Right = "RIGHT"
}
console.log(Direction.Up);
Сообщения
Проверить
Показать решение на 3 сек.
Показать подсказку

5. String Enum vs Numeric Enum

id: 40694_se_06_diff

В левой колонке перечислены характеристики перечислений (enum) в TypeScript. В правой колонке приведены типы перечислений: строковые (String Enum) и числовые (Numeric Enum). Сопоставьте каждую характеристику с соответствующим типом перечисления. Обратите внимание, что каждая характеристика относится только к одному типу, и в правой колонке варианты могут повторяться, но их id уникальны.

Сопоставьте строки в правой(нижней) части с соответствующими строками в левой(верхней) по порядковому номеру
Требует явной инициализации каждого члена строковым значением
Поддерживает автоинкремент для значений членов
При сериализации в JSON значение представлено строкой
При сериализации в JSON значение представлено числом
Не поддерживает обратное отображение (reverse mapping)
Поддерживает обратное отображение (reverse mapping)
Numeric Enum
String Enum
String Enum
Numeric Enum
String Enum
Numeric Enum
Сообщения
Проверить
Показать подсказку

6. Выбор корректных обращений

id: 40694_se_07_valid_keys

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

Кликните по всем фрагментам, которые подходят под условие задания.
enum Status {
  Active = "ACTIVE",
  Inactive = "INACTIVE",
  Pending = "PENDING"
}

let currentStatus: Status;

// Примеры обращений:
currentStatus = {{Status.Active~|~t1}};      // 1
currentStatus = {{Status["Active"]~|~t2}};  // 2
currentStatus = {{Status.Inactive~|~t3}};   // 3
currentStatus = {{Status.Pending~|~t4}};    // 4
currentStatus = {{Status.ACTIVE~|~t5}};     // 5
currentStatus = {{Status["PENDING"]~|~t6}}; // 6
currentStatus = {{Status.Unknown~|~t7}};    // 7
console.log({{Status~|~t8}});               // 8
Сообщения
Проверить
Показать подсказку

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

id: 40694_compiler

Изучите строковые Enums — они делают ваш код понятным и защищенным от опечаток. В отличие от числовых, здесь каждое значение нужно прописывать вручную, что идеально подходит для систем ролей, статусов или типов уведомлений. Попробуйте добавить новую роль 'Moderator' в перечисление и создайте для неё уникальное поведение в функции. Обратите внимание: TypeScript строго следит за типами, поэтому просто передать строку вместо элемента Enum не получится — проверьте это сами, раскомментировав ошибочный вызов!

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