Union с примитивами
В объединении могут стоять не только литералы, но и обычные типы. Такой union означает «значение одного из этих типов»:
Видеоуроки, интерактивный редактор и сохранение прогресса — бесплатно, сразу после входа.
ВойтиСоздать аккаунт — бесплатноВ объединении могут стоять не только литералы, но и обычные типы. Такой union означает «значение одного из этих типов»:
export type Id = string | number;
export const a: Id = "abc-123";
export const b: Id = 42;Ситуация из жизни: идентификатор приходит из разных источников. Из базы это число, из URL или внешнего API строка. Вместо того чтобы приводить всё к одному виду или писать any, тип честно описывает обе возможности.
Важное свойство union: пока не известно, какой именно вариант перед нами, доступны только те операции, которые есть у всех вариантов сразу. У string есть toUpperCase, у number его нет, значит на значении типа Id вызвать toUpperCase нельзя. Как с этим работать, разбирается в задании про typeof.
Файл уже размечен: Id описан как объединение string и number, обе константы ему соответствуют. Убедись, что код компилируется без ошибок, и проверь границы типа: добавь строку export const c: Id = true;, посмотри на текст ошибки компилятора и убери её.
Затем попробуй вызвать a.toUpperCase() и объясни себе, почему компилятор против, хотя в a лежит строка.