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».
Вывод
Здесь появится то, что напечатает программа.