Client API Type-Safe không cần Codegen

Ngừng sử dụng as User cho các phản hồi API.

Việc ép kiểu as User là một lời nói dối mà bạn nói với trình biên dịch. TypeScript nghĩ rằng dữ liệu là chính xác. Khi chạy (runtime), dữ liệu thường bị sai. Lỗi chỉ lộ diện sau đó ba hàm nữa. Stack trace không giúp ích được gì.

Mạng là nơi bạn không thể tin tưởng bất cứ điều gì. Hãy xác thực dữ liệu tại ranh giới (boundary).

Sử dụng Zod. Định nghĩa một schema một lần duy nhất. Zod cung cấp cho bạn cả kiểu dữ liệu (type) và việc kiểm tra (check). Các kiểu dữ liệu của bạn sẽ không bị sai lệch.

Xây dựng một fetch wrapper đơn giản. Truyền một schema vào đó. Sử dụng safeParse để kiểm tra body. Dữ liệu chỉ trở thành một kiểu dữ liệu sau khi đã được kiểm tra.

Đừng ném ra lỗi (throw errors). Hãy trả về một đối tượng Result. Sử dụng một union với ok: true hoặc ok: false. Điều này buộc bạn phải xử lý các trường hợp thất bại.

Áp dụng logic tương tự cho các URL của bạn. Tạo schema cho các query parameters. Ngăn chặn lỗi đánh máy trước khi yêu cầu được gửi đi.

Sử dụng Zod khi:

  • Bạn có ít endpoint.
  • Bạn không có spec OpenAPI.
  • Bạn muốn có sự an toàn khi chạy (runtime safety).

Sử dụng codegen khi:

  • Bạn có hàng trăm endpoint.
  • Bạn có một spec hoàn hảo.

Ép kiểu không phải là kiểm tra. Hãy coi as User là một "code smell" gần các hàm fetch.

Parse tại ranh giới. Tin tưởng bên trong.

Nguồn: https://dev.to/pavelespitia/type-safe-api-clients-in-typescript-without-a-code-generator-1k32