
Урок 02 · 9 хв
Inference: коли тип писати не треба
Компілятор уже знає тип. Анотація потрібна, коли він не може вгадати.
Найчастіша помилка новачка — розставити : string на кожну змінну. TS і так виводить тип зі значення. Це type inference: let count = 0 уже number. Пиши анотацію там, де межа: аргумент функції, значення, що повертає публічний API, порожній стартовий стейт.
Ще компілятор підглядає контекст. Якщо функція очікує (n: number) => string, у колбеку n можна не анотувати — тип прийде ззовні. Це contextual typing. А от у порожнього масиву контексту немає: const xs = [] — це неявний any[], і такий код ламається там, де тип потрібен точно.
Базові типи, які справді потрібні
stringnumberbooleannullі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 там само позначено як майже марний: він означає «не примітив», а не «об'єкт із полями».
- Everyday Types — примітиви, масиви, type alias
- Type Inference — коли тип пишеться сам
- Literal Types — чому
constдає"admin", а неstring
Перевірка
Закріпи, поки не пішов далі
1. Який тип у
const role = "admin"?2. Функція обіцяє
string[], усерединіconst rows = []іreturn rows. Що скаже strict?