JSON sang TypeScript
Dán một mẫu JSON và công cụ sẽ suy ra các interface TypeScript khớp với cấu trúc của nó. Kiểu của các trường được xác định theo giá trị quan sát được (string, number, boolean, Array<T>); các đối tượng lồng nhau nhận interface có tên riêng; còn những trường được quan sát là null hoặc thiếu sẽ trở thành tùy chọn (?) hoặc cho phép null (| null) tùy theo phong cách bạn chọn.
Cách chuyển JSON sang TypeScript
-
1
Dán JSON
Một mẫu là đủ, nhưng nhiều mẫu sẽ cải thiện việc suy luận khả năng null và kiểu hợp (union).
-
2
Chọn phong cách đầu ra
`interface` (mặc định), bí danh `type`, hoặc interface chỉ đọc với mọi trường được đánh dấu `readonly`.
-
3
Chọn chiến lược tùy chọn
Đánh dấu trường là `?` (có thể vắng mặt) hoặc `| null` (luôn hiện diện, nhưng có thể là null).
-
4
Sao chép các kiểu
Dán vào tệp `.ts` là bạn đã có quyền truy cập được định kiểu chặt chẽ vào phản hồi API.
Ví dụ
Đầu vào:
{ "id": 1, "name": "Alice", "age": null, "tags": ["admin", "user"], "address": { "city": "Madrid" } }
Đầu ra:
interface User {
id: number;
name: string;
age: number | null;
tags: string[];
address: Address;
}
interface Address {
city: string;
}
Ánh xạ kiểu
| JSON | TypeScript |
|---|---|
| chuỗi | string |
| số nguyên / số thập phân | number |
| giá trị boolean | boolean |
| chỉ null | null |
| null + T | T | null (hoặc T?) |
| mảng của T | T[] |
| mảng hỗn hợp | (T1 | T2)[] |
| đối tượng | Interface lồng nhau có tên |
| mảng rỗng | unknown[] (không thể suy luận) |
Trường tùy chọn so với trường cho phép null
foo?: string, trường này có thể vắng mặt khỏi đối tượng. Cần kiểm traundefined.foo: string | null, trường này luôn hiện diện nhưng có thể được đặt null một cách tường minh.foo?: string | null, có thể vắng mặt HOẶC là null.
Bản thân JSON không có undefined, nhưng các API báo hiệu sự vắng mặt của trường theo những cách khác nhau. Hãy khớp với ngữ nghĩa của API bạn dùng.
- Các API REST thường bỏ qua trường bị thiếu ->
?:. - GraphQL luôn trả về mọi trường được yêu cầu ->
| null. - Một số SDK dùng cả hai cách trong các ngữ cảnh khác nhau.
Kiểu hợp so với kiểu literal
Nếu công cụ thấy cùng một trường chuỗi chỉ nhận một tập nhỏ giá trị qua các mẫu ("status": "pending", "active", "archived"), nó có thể tạo ra một kiểu hợp của các literal chuỗi:
status: "pending" | "active" | "archived";
Bật “suy luận kiểu hợp của literal chuỗi” nếu bạn muốn điều này.
Lỗi thường gặp
- Suy luận từ một mẫu duy nhất. Mọi trường đều trở thành bắt buộc; không thể quan sát khả năng null. Để có kiểu tốt hơn, hãy cung cấp 5-10 mẫu đa dạng.
- Mảng rỗng.
"tags": []không cung cấp thông tin kiểu, trình tạo sẽ xuất raunknown[]. Hãy cung cấp một mẫu có ít nhất một phần tử. - Mảng kiểu hỗn hợp.
[1, "two", true]tạo ra(number | string | boolean)[]. Thường thì điều này có nghĩa là JSON nên được thiết kế lại thay vì định kiểu như hiện tại. - Khóa dạng chuỗi số. JSON
{"1": "a", "2": "b"}vẫn là một đối tượng trong TypeScript (Record<string, string>), không phải mảng. Trình tạo xử lý đúng trường hợp này.
Câu hỏi thường gặp
Hãy khớp với API của bạn. Các API REST loại bỏ trường null thì phù hợp với ?:. GraphQL, vốn luôn trả về mọi trường được chọn, thì phù hợp với | null. Khi phân vân, T | null với cú pháp bắt buộc sẽ chặt chẽ hơn và bắt được nhiều lỗi hơn tại thời điểm biên dịch.
Có, nếu bạn bật tính năng này và cung cấp nhiều mẫu. Một trường được quan sát có 2-5 giá trị chuỗi khác nhau qua các mẫu sẽ được xuất ra dưới dạng kiểu hợp literal. Vượt ngưỡng đó, nó quay về string.
Phần lớn trường hợp nên dùng interface, nó mở cho việc mở rộng và được TypeScript tối ưu tốt hơn. Bí danh type hữu ích cho union, intersection, tuple và kiểu ánh xạ (mapped type). Với kiểu suy ra từ JSON thì cả hai đều dùng được; hãy chọn theo quy ước của dự án.
Có. Mỗi đối tượng lồng nhau trở thành một interface riêng, với tên suy ra từ khóa (user.address -> Address). Với các cấu trúc rất sâu hoặc lặp lại nhiều, hãy cân nhắc dùng JSON Schema cùng một trình tạo schema-to-TS chuyên dụng.
Công cụ liên quan
Bảng tham chiếu ASCII
Bảng ASCII đầy đủ từ 0 đến 127 với giá trị thập phân, thập lục phân, bát phân, nhị phân và ký hiệu tham chiếu ký tự số HTML, gồm NUL, LF và DEL.
Tham chiếu ký tự HTML
Danh sách có thể tìm kiếm các thực thể HTML, mã tên và mã số tương ứng của chúng, cùng chức năng sao chép chỉ với một cú nhấp cho các ký tự đặc biệt và biểu tượng.
Bảng tham khảo phím tắt
Tìm phím tắt mặc định theo tài liệu của VS Code, Chrome và Bash dùng GNU Readline trên macOS, Windows và Linux.
Bảng tra cứu nhanh Markdown
Tài liệu Markdown thực dụng với bản xem trước thực tế và ví dụ có thể sao chép cho tiêu đề, danh sách, bảng, mã, liên kết, hình ảnh và cú pháp GFM.
Trình định dạng HTML
Định dạng HTML cục bộ trong trình duyệt với thụt lề hai hoặc bốn khoảng trắng. HTML không được tải lên hoặc xác thực.
Công cụ đổi PX sang PT
Đổi giá trị pixel CSS không âm sang điểm chữ theo công thức 1 px = 0,75 pt. Kết quả hiển thị tối đa bốn chữ số thập phân.
Công cụ này có phiên bản bằng các ngôn ngữ khác
- JSON ke TypeScript [ID]
- JSON a TypeScript [ES]
- JSON vers TypeScript [FR]
- JSON para TypeScript [PT]
- JSON에서 TypeScript로 [KO]
- تحويل JSON إلى TypeScript [AR]
- JSON zu TypeScript [DE]
- JSON naar TypeScript [NL]
- JSON เป็น TypeScript [TH]
- JSON till TypeScript [SV]
- JSON do TypeScript [PL]
- JSONからTypeScriptへ [JA]
- JSON a TypeScript [IT]
- JSON в TypeScript [RU]
- JSON'dan TypeScript'e [TR]
- JSON 转 TypeScript [ZH]
- JSON to TypeScript [EN]