TypeScript Essentials

Урок 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, тип звузиться не так, як ти думаєш.

typeof, рівність, in
AI

Можна спитати про це правило«Discriminated union»

Результат операції — не throw заради типу
AI

Можна спитати про цей пункт«Суть уроку»

Вичерпна перевірка

never ловить забуту гілку

Додав третій варіант у Shape — default перестане компілюватися. Це й потрібно: never ловить забуту гілку. if/else без never нову форму проковтне мовчки, і баг спливе вже в проді.

AI

Можна спитати про цей пункт«Вичерпна перевірка»

Перевірка

Закріпи, поки не пішов далі

  1. 1. Чому не можна одразу викликати .toUpperCase() у string | number?

  2. 2. Що робить поле kind в union об'єктів?