Type-Safe API Clients Without Codegen

Припиніть використовувати as User для відповідей API.

Приведення типу as User — це брехня, яку ви кажете своєму компілятору. TypeScript вважає, що дані правильні. Під час виконання (runtime) дані часто виявляються неправильними. Помилки випливають через три функції. Стек викликів (stack trace) не допоможе.

Мережа — це те, чому не можна довіряти. Перевіряйте дані на межі (boundary).

Використовуйте Zod. Визначте схему один раз. Zod надає вам і тип, і перевірку. Ваші типи не будуть розходитися.

Створіть простий fetch-wrapper. Передавайте в нього схему. Використовуйте safeParse для перевірки тіла (body). Дані стають типом лише після перевірки.

Не викидайте помилки. Повертайте об'єкт Result. Використовуйте union з ok: true або ok: false. Це змушує вас обробляти помилки.

Застосовуйте ту саму логіку до ваших URL. Створюйте схеми для ваших query-параметрів. Запобігайте помилкам у написанні ще до того, як запит буде відправлено.

Використовуйте Zod, коли:

  • У вас мало ендпоінтів.
  • У вас немає специфікації OpenAPI.
  • Ви хочете безпеки під час виконання (runtime safety).

Використовуйте codegen, коли:

  • У вас сотні ендпоінтів.
  • У вас є ідеальна специфікація.

Приведення типу — це не перевірка. Вважайте as User «запахом коду» (code smell) поблизу fetch.

Парсіть на межі. Довіряйте всередині.

Джерело: https://dev.to/pavelespitia/type-safe-api-clients-in-typescript-without-a-code-generator-1k32