Видеоуроки, интерактивный редактор и сохранение прогресса — бесплатно, сразу после входа.
ВойтиСоздать аккаунт — бесплатноЗакончили урок?
Войдите, чтобы отмечать прогресс
Тип Theme теперь допускает ровно одно значение. Любое другое присваивание становится ошибкой:
Один литерал сам по себе встречается редко, но он основа для двух вещей, которые дальше в курсе будут постоянно.
Во-первых, объединения литералов: "light" | "dark" это следующее задание. Во-вторых, поля-дискриминаторы в объектах, по которым различают варианты одного union (status: "success" против status: "error").
const и вывод литеральных типовTypeScript и сам выводит литеральные типы, но только для констант:
Логика простая: const переприсвоить нельзя, значит значение так и останется "light", и сузить тип безопасно. У let значение может смениться, поэтому выводится широкий string.
Из-за этого объекты ведут себя неожиданно:
Поля объекта изменяемы, поэтому литеральный тип не выводится. Помогает as const, который делает объект и все его поля неизменяемыми и сохраняет литеральные типы: