Chuyển đến nội dung chính
EVOA Toolbox

JSON sang TypeScript

Tạo interface hoặc type TypeScript từ JSON mẫu. Xử lý đối tượng lồng nhau, mảng, union, null và thuộc tính tùy chọn.

Được xử lý cục bộ trong trình duyệt. Văn bản của bạn không được tải lên.

Đang tải công cụ…

Công cụ này làm gì

Dán một phản hồi API mẫu hoặc tệp cấu hình và nhận khai báo TypeScript dùng được ngay. Đối tượng lồng nhau trở thành các interface có tên riêng, mảng trở thành mảng có kiểu, và giá trị null được gán kiểu null để bạn thấy trường nào có thể bị thiếu.

Khi một mảng chứa nhiều đối tượng, cấu trúc của chúng được gộp lại: thuộc tính có trong mọi phần tử vẫn là bắt buộc, còn thuộc tính chỉ xuất hiện ở một số phần tử trở thành tùy chọn (name?: type). Mảng chứa nhiều loại giá trị khác nhau tạo ra union như (string | number)[]. Tên thuộc tính không phải định danh hợp lệ, như first-name, sẽ được đặt trong dấu nháy.

Bạn chọn tên kiểu gốc, đầu ra là interface hay type alias, có export hay không, và có đánh dấu thuộc tính là readonly hay không. Việc suy luận chạy trong trình duyệt của bạn trên đúng mẫu bạn cung cấp, nên kết quả chỉ đầy đủ đến mức mẫu cho phép: hãy xem lại và nới lỏng kiểu ở những chỗ API của bạn có thể trả về cấu trúc khác.

Cách sử dụng

  1. 1Dán một JSON mẫu tiêu biểu (mẫu càng đa dạng thì việc phát hiện trường tùy chọn càng tốt).
  2. 2Đặt tên kiểu gốc và chọn interface hoặc type.
  3. 3Bật hoặc tắt export và readonly cho phù hợp với phong cách mã của bạn.
  4. 4Sao chép mã đã tạo hoặc tải xuống dưới dạng types.ts, rồi đối chiếu kiểu của từng trường với hợp đồng API của bạn.

Định dạng được hỗ trợ

Đầu vào: JSON nghiêm ngặt. Đầu ra: khai báo TypeScript (.ts) dùng interface hoặc type alias.

Quyền riêng tư

Công cụ này chạy trong trình duyệt của bạn. Dữ liệu bạn cung cấp được xử lý trên thiết bị và không được gửi đến máy chủ của chúng tôi.

Hạn chế

  • Kiểu được suy luận chỉ từ một mẫu. Một trường luôn là chuỗi trong mẫu của bạn có thể là số hoặc null ở nơi khác.
  • Mảng rỗng được gán kiểu unknown[] vì không có gì để suy luận.
  • Các map dạng đối tượng (ví dụ khóa là ID) được tạo thành các thuộc tính cố định, không phải Record<string, T>. Bạn cần tự chuyển đổi những phần này.
  • Ngày tháng, UUID và enum xuất hiện dưới dạng string hoặc number thông thường; công cụ không thể biết ý nghĩa của chúng.
  • Mọi số đều được gán kiểu number, kể cả các giá trị vượt 2^53 mà JSON.parse làm tròn.

Câu hỏi thường gặp

Thuộc tính tùy chọn được xác định như thế nào?

Chỉ bằng cách so sánh các đối tượng trong cùng một mảng (hoặc lặp lại ở cùng vị trí). Nếu một thuộc tính vắng mặt ở ít nhất một phần tử, nó được đánh dấu là tùy chọn. Thuộc tính tồn tại với giá trị null được gán kiểu null (hoặc union với null), không phải tùy chọn.

Nên chọn interface hay type?

Với cấu trúc đối tượng thông thường, hai loại này có thể thay thế cho nhau. Interface có thể được mở rộng và gộp; type alias hợp với union và mapped type hơn. Hãy chọn loại mà mã của bạn đang dùng.

Vì sao hai đối tượng lồng nhau lại có cùng một tên kiểu?

Các đối tượng có cấu trúc giống hệt nhau được dùng lại thành một khai báo duy nhất. Khi hai cấu trúc khác nhau sẽ trùng tên, cấu trúc thứ hai được thêm hậu tố số như Item2.

JSON của tôi có bị tải lên không?

Không. Kiểu được tạo ngay trong trình duyệt của bạn.

Công cụ liên quan