Типизация ответа API через утверждение типа не спасла от падения в проде
Ответ REST API типизируется так:
type User = { id: number; profile: { city: string } };
const res = await fetch('/api/users');
const users = (await res.json()) as User[];
users.forEach((u) => console.log(u.profile.city));
Проект собирается со строгими проверками и без единой ошибки типов. В проде часть пользователей приходит без поля profile, и страница падает с ошибкой чтения свойства у undefined.
Почему проверка типов не помогла?
- Проблема в том, что тип описан через type: только interface порождает проверку структуры ответа.
- Разбор ответа теряет типы: если типизировать сам запрос параметром-дженериком, проверка структуры появится и в рантайме.
- Утверждение типа лишь сообщает компилятору, чем считать значение; в рантайме данные никто не сверяет с типом.
- Строгий режим включён не полностью: с дополнительной опцией компилятор начнёт проверять ответы сервера.
