TypeScript Essentials

Урок 02 · 9 хв

Inference: коли тип писати не треба

Компілятор уже знає тип. Анотація потрібна, коли він не може вгадати.

Найчастіша помилка новачка — розставити : string на кожну змінну. TS і так виводить тип зі значення. Це type inference: let count = 0 уже number. Пиши анотацію там, де межа: аргумент функції, значення, що повертає публічний API, порожній стартовий стейт.

Ще компілятор підглядає контекст. Якщо функція очікує (n: number) => string, у колбеку n можна не анотувати — тип прийде ззовні. Це contextual typing. А от у порожнього масиву контексту немає: const xs = [] — це неявний any[], і такий код ламається там, де тип потрібен точно.

Виведення зі значення
AI

Можна спитати про це правило«const vs let»

as const фіксує форму
AI

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

Базові типи, які справді потрібні

  • string number boolean
  • null і undefined — різні речі. У strict не можна класти їх куди завгодно.
  • Літерали: "idle", 200, true
  • void — функція нічого корисного не повертає
  • object майже марний. Пиши конкретну форму.
Де анотація обов'язкова

Тонкість: const xs = [] сам по собі не помилка. TS позначає його як неявний any[] і доростить тип із push. Лайка з'являється там, де тип уже потрібен точно — наприклад у return. А всередині об'єкта чи дженерика порожній масив стає never[]: const state = { rows: [] } — у state.rows уже нічого не покласти.

Базові типи — у розділі Everyday Types: примітиви, масиви, union, type alias. object там само позначено як майже марний: він означає «не примітив», а не «об'єкт із полями».

AI

Можна спитати про цей пункт«Базові типи, які справді потрібні»

Перевірка

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

  1. 1. Який тип у const role = "admin"?

  2. 2. Функція обіцяє string[], усередині const rows = [] і return rows. Що скаже strict?