Как была устроена работа с API: создавали типы и методы вручную или генерировали
Что проверяют
Как на проекте был устроен контракт между фронтендом и бэкендом и понимаете ли вы цену каждого подхода. Следом обычно спрашивают, что происходило, когда бэкенд менял API, и кто замечал это первым: CI или пользователь.
Как отвечать
Рассказывайте о своём проекте, но через понятный каркас: откуда брался контракт, как из него получались типы, как ловили расхождения.
- ручные типы: оправданы, когда API маленький, спецификации нет или она не поддерживается. Минус в том, что TypeScript проверяет ваши ожидания, а не реальный ответ, и расхождение всплывает в рантайме;
- генерация из OpenAPI:
openapi-typescriptдаёт только типы, к ним удобно братьopenapi-fetch;orvalгенерирует клиент, хуки TanStack Query и схемы zod; есть также@hey-api/openapi-tsиopenapi-generator; - GraphQL: GraphQL Code Generator строит типы по схеме и по вашим запросам, то есть ровно под те поля, которые вы выбрали;
- без генерации: tRPC даёт сквозные типы, когда бэкенд тоже на TypeScript; для gRPC типы берут из
.proto.
Сильный ответ описывает процесс, а не только инструмент. Генерация запускается в CI: сгенерированные файлы либо коммитятся, и CI проверяет, что они не отличаются от свежей генерации, либо собираются на лету. Поверх сгенерированных DTO часто стоит тонкий слой маппинга в модели фронтенда, чтобы переименование поля не расходилось по компонентам. Для внешних и ненадёжных API добавляют валидацию ответа в рантайме.
Если генерации у вас не было, так и скажите: типы писали вручную. Объясните почему и что сделали бы иначе сейчас. Цифры приводите свои и проверяемые.
Где спотыкаются
Считают, что сгенерированные типы гарантируют правильный ответ. Они гарантируют соответствие спецификации, а спецификация может отставать от реального бэкенда.
Правят сгенерированный код руками. Следующая генерация молча стирает правки, и баг возвращается.
Называют эффект вроде «разработка ускорилась на 30%», но не могут назвать ни инструмент, ни то, как устроено обновление типов при изменении API.