TypeScriptУрок 9 из 16

Enum или объединение литералов

enum создаёт настоящий объект, который остаётся в JavaScript после компиляции. Объединение литералов исчезает без следа и обычно проще.

Главное

  • Числовой enum нумерует значения с нуля и работает в обе стороны: Role[1] — "Member".
  • Строковый enum, Open = "open", оставляет в логах понятные значения.
  • Объединение "free" | "pro" | "team" после компиляции просто пропадает.
  • Массив с as const даёт и список для цикла, и тип: (typeof LEVELS)[number].
  • Запуск .ts напрямую в Node.js и флаг erasableSyntaxOnly не принимают enum.

Пример

enum Role {  Guest,  Member,  Admin,}// After compiling, Role is a real object: { Guest: 0, Member: 1, Admin: 2, ... }console.log(`Admin = ${Role.Admin}, 1 = ${Role[1]}`); type Plan = "free" | "pro" | "team"; // disappears after compilingconst plan: Plan = "pro"; const LEVELS = ["low", "medium", "high"] as const;type Level = (typeof LEVELS)[number]; // "low" | "medium" | "high"const level: Level = "high"; console.log(`${plan} / ${level} / ${LEVELS.length} levels`);

Role в JavaScript — объект со свойствами и обратными ключами. Plan и Level существуют только для проверки: в собранном коде от них не остаётся ни строчки.

Задание

Как пользоваться редактором⌘ Enter или Ctrl Enter — запустить код, ⇧ ⌘ Enter — проверить задание.Tab и Shift Tab сдвигают строку или выделение; Esc, затем Tab — выйти из редактора.Проверка сравнивает то, что напечатала программа, с заданием; пробелы в конце строк не важны.После двух неудачных проверок можно открыть решение. Ваш код сохраняется в этом браузере.

Замените enum Status на массив STATUSES с as const и тип, выведенный из него, а затем в цикле выведите три строки: «open: waiting for reply», «pending: in progress», «closed: done».

Вывод

Здесь появится то, что напечатает программа.