Вступить в клуб →
сложнаявопросJavaScript и TypeScript

Типизация ответа 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 порождает проверку структуры ответа.
  • Разбор ответа теряет типы: если типизировать сам запрос параметром-дженериком, проверка структуры появится и в рантайме.
  • Утверждение типа лишь сообщает компилятору, чем считать значение; в рантайме данные никто не сверяет с типом.
  • Строгий режим включён не полностью: с дополнительной опцией компилятор начнёт проверять ответы сервера.

🔒 Проверка ответа — для участников клуба

  • Проверка ответа
  • Подсказка, если застряли
  • Разбор с объяснением, почему так
  • Прогресс по всем задачам и виртуальные собеседования
Зарегистрироваться →

Регистрация занимает минуту

Другие задачи раздела