JSON → TypeScript
Dán một mẫu JSON và nhận ngay các định nghĩa interface TypeScript tương ứng — object lồng nhau tự động thành interface riêng. Cùng mẫu đó cũng có thể sinh kiểu cho Python, Java, C#, Go, Rust, Swift, Kotlin, Dart, C++ và Ruby, hoặc schema kiểm tra dữ liệu cho Zod, Yup, Joi, Valibot và JSON Schema (draft 2020-12).
Các bước sử dụng
- Dán JSON vào ô bên trái (vd một response API).
- Chọn đích ở ô Đầu ra: nhóm Kiểu dữ liệu chứa kiểu của các ngôn ngữ, nhóm Schema kiểm tra dữ liệu chứa Zod, Yup, Joi, Valibot và JSON Schema.
- Tuỳ chọn đặt Tên gốc cho interface hoặc schema cấp cao nhất.
- Sao chép code sinh ra ở bên phải.
Mẹo
- Dùng mẫu đại diện có đầy đủ trường để suy luận kiểu chính xác.
- Mọi phần tử của mảng đều được xét, không chỉ phần tử đầu. Key thiếu ở một số object sẽ thành tuỳ chọn (
key?:trong TypeScript,.optional()trong Zod, không nằm trongrequiredcủa JSON Schema). - Giá trị là
nullở vài phần tử nhưng có giá trị thật ở phần tử khác sẽ thành nullable (string | null,.nullable(),["string", "null"]). Phần tử khác loại nhau thì lùi vềunknown[]. - Object lồng nhau nhận interface hoặc hằng schema riêng đặt tên theo key. Hằng schema được viết theo thứ tự con trước cha, nên dán nguyên file là chạy được.
- Số nguyên thành kiểu integer trong schema (
z.number().int(),"type": "integer"); chỉ cần một số có phần thập phân trong mẫu là trường đó thành number thường. - Chuỗi trong Joi cho phép
""và Yup dùng.defined()thay vì.required(), nên chuỗi rỗng trong dữ liệu thật không bị từ chối chỉ vì mẫu có chữ.
Câu hỏi thường gặp
Kiểu được suy luận thế nào?
Từ giá trị trong mẫu: chuỗi → string, số → number, boolean → boolean, object → interface đặt tên, mảng → T[].
Nếu một trường có thể null?
Nếu trường đó là null ở mọi mẫu thì nó có kiểu null. Hãy đặt thêm một mẫu có giá trị thật bên cạnh (ví dụ mảng hai phần tử, một phần tử null và một phần tử là chuỗi) thì trường sẽ thành nullable.
JSON Schema sinh ra theo phiên bản nào?
Draft 2020-12: object lồng nhau nằm trong $defs và được tham chiếu bằng $ref. Thuộc tính thừa không bị cấm, vì một mẫu duy nhất không chứng minh được một key sẽ không bao giờ xuất hiện.