
Урок 10 · 11 хв
Async, fetch, реальний код
Як типізувати те, що приходить із сервера, — без самообману.
Це урок, заради якого зазвичай і вчать TS. async функція повертає Promise<T>. await знімає Promise — як у MDN: async. Дані з мережі — unknown, доки не перевірив: сервер не зобов'язаний дотримуватися твого типу.
fetch віддає Response. res.ok — це HTTP-статус, а не форма JSON. res.json() у типах DOM — Promise<any>. Доки сам не звузиш, компілятор погодиться з будь-якою етикеткою. Guard, Zod або генерація типів з OpenAPI — нормальні варіанти. as Post — ні.
На цьому вже можна писати прод. Далі — декоратори, умовні типи в бібліотеках, infer, ambient-модулі. Це не «найважливіше». Коли знадобиться прочитати тип із чужої ліби — повернешся до Advanced Types.
- MDN · Fetch — запит, статус, тіло відповіді
- MDN · Promise — що саме знімає
await - Zod — перевірка JSON у рантаймі, типи виводяться зі схеми
Перевірка
Закріпи, поки не пішов далі
1. Який тип у
await fetch(url).then(r => r.json())без своїх типів?2. Що повернути з async-функції, яка віддає User?