JSON → kiểu TypeScript
Suy ra interface TypeScript từ một mẫu JSON ngay lập tức
Về công cụ này
Dán một mẫu JSON — phản hồi API, tệp cấu hình — và nhận về interface TypeScript được suy ra từ đó: đối tượng lồng nhau thành kiểu lồng nhau, mảng có kiểu phần tử (kèm union khi nội dung pha trộn), và những khóa không phải định danh hợp lệ sẽ được đặt trong dấu nháy đúng cách.
Kiểu sinh ra là điểm khởi đầu chứ không phải bản cam kết: việc suy diễn chỉ nhìn thấy một mẫu, nên một trường tình cờ mang giá trị null trong ví dụ của bạn sẽ được gán kiểu null, còn những trường tùy chọn vắng mặt thì nó hoàn toàn không biết. Kết quả cố ý để trần trụi — không decorator, không kiểm tra lúc chạy — để bạn dán đi đâu cũng được rồi tinh chỉnh sau.
Với những trường thay đổi giữa các lần gọi, hãy chạy thêm một mẫu nữa rồi gộp bằng tay, hoặc nâng cấp lên bộ công cụ ưu tiên schema (OpenAPI, zod) khi hình dạng dữ liệu đã ổn định. Còn với khoảnh khắc “tôi chỉ cần một cái kiểu cho cái phản hồi này” hằng ngày thì một lần dán là đủ.
Câu hỏi thường gặp
- Vì sao trường có thể null của tôi lại chỉ được gán kiểu null?
- Việc suy diễn chỉ thấy đúng cái mẫu bạn dán vào. Nếu ở đó trường ấy là null thì null là tất cả những gì nó biết được. Sau khi sinh mã, hãy sửa thành string | null (hoặc kiểu thật của nó) — hoặc dán một mẫu mà trường đó có giá trị.
- Trường tùy chọn được xử lý ra sao?
- Không được phát hiện — một mẫu đơn lẻ không thể phân biệt “luôn có mặt” với “lần này có mặt”. Trường vắng trong mẫu thì cũng vắng trong kiểu. Hãy tự đánh dấu tùy chọn (name?:) ở những chỗ bạn biết API có thể bỏ qua.
- Mảng chứa nhiều kiểu sẽ cho ra gì?
- Một union: [1, "a"] suy ra (number | string)[]. Mảng rỗng suy ra unknown[] vì chẳng có phần tử nào để xem — hãy thay bằng kiểu phần tử thật khi bạn đã biết.
- Nên dùng kiểu suy diễn hay một thư viện schema như zod?
- Interface suy diễn chỉ tồn tại lúc biên dịch — chúng không kiểm tra gì khi chạy. Với công cụ nội bộ và nhu cầu gán kiểu nhanh thì quá hoàn hảo; còn với dữ liệu không đáng tin lúc chạy, hãy định nghĩa schema zod/valibot rồi suy ra kiểu tĩnh từ đó.