Видеоуроки, интерактивный редактор и сохранение прогресса — бесплатно, сразу после входа.
ВойтиСоздать аккаунт — бесплатноЗакончили урок?
Войдите, чтобы отмечать прогресс
Теперь тип перечисляет два значения, поэтому оба присваивания допустимы. Ни одно другое значение компилятор не пропустит:
С типом string опечатка "lihgt" дошла бы до рантайма и в лучшем случае проявилась как «тема не переключается». С union она подсвечивается в редакторе сразу, ещё до запуска, а автодополнение показывает список допустимых значений.
У union из литералов есть приятное следствие: после проверки одного варианта компилятор точно знает, что осталось.
Если позже в Theme добавится третье значение, такой код придётся дописать, и в более сложных случаях компилятор об этом напомнит. Именно на этом свойстве построены задания про сужение типов в конце курса.
Похожую задачу решает enum, но объединение литералов проще: оно не создаёт кода в рантайме, легко сериализуется в JSON и не требует импортировать что-то отдельное. В современном коде на TypeScript union из строковых литералов используется чаще.