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