
Урок 05 · 12 хв
Union і narrowing
Головна навичка TypeScript. Решта — похідне.
Union — «одне з». Після string | number TS не дасть викликати .toUpperCase(), доки ти не доведеш, що це рядок. Це і є narrowing: звуження типу перевіркою. Метод має існувати в кожного члена union — інакше спершу розвилка.
Перевірки ті самі, що в JS: typeof, ===, in, instanceof. Handbook окремо розбирає truthiness (if (value)) і equality narrowing. Обережніше з if (value): порожній рядок і 0 теж falsy, тип звузиться не так, як ти думаєш.
Вичерпна перевірка
Додав третій варіант у Shape — default перестане компілюватися. Це й потрібно: never ловить забуту гілку. if/else без never нову форму проковтне мовчки, і баг спливе вже в проді.
- Narrowing — typeof, in, instanceof, truthiness
- Discriminated Unions — поле
kindі вичерпний switch - MDN · typeof — які рядки справді повертає оператор
Перевірка
Закріпи, поки не пішов далі
1. Чому не можна одразу викликати
.toUpperCase()уstring | number?2. Що робить поле
kindв union об'єктів?