DevToolPal
VI

JSON sang TypeScript

Tạo interface hoặc type TypeScript từ mẫu JSON, hỗ trợ kiểu lồng nhau, trường tùy chọn và xử lý null.

Chạy cục bộ, không bao giờ tải lên

Tùy chọn

Khai báo bằng
Giá trị null

JSON

0 ký tự · 0 B

TypeScript

0 ký tự · 0 B

Công cụ làm gì

Công cụ tạo JSON sang TypeScript đọc một mẫu JSON, như phản hồi API hoặc tệp cấu hình, rồi viết các interface TypeScript mô tả nó. Thay vì gõ tay từng trường, bạn dán một phản hồi thật và nhận được kiểu dùng ngay trong mã, cho kết quả fetch, state của Redux hay dữ liệu kiểm thử.

Công cụ xem xét mọi giá trị chứ không chỉ giá trị đầu tiên. Số thành number, văn bản thành string, đối tượng lồng nhau có interface riêng và các phần tử mảng được gộp lại, nên trường chỉ xuất hiện ở một số phần tử được đánh dấu tùy chọn, còn trường đôi khi là null được gán kiểu có thể null.

Cách sử dụng

  1. Dán JSON vào ô nhập, tải lên tệp .json hoặc bấm Ví dụ.
  2. Đặt tên kiểu gốc và chọn phong cách: interface hay type, null viết là | null hay trường tùy chọn, thuộc tính readonly và có thêm export cho mỗi khai báo hay không.
  3. Sao chép TypeScript hoặc tải xuống dưới dạng tệp .ts.

JSON không hợp lệ được báo kèm dòng và cột gây lỗi để bạn sửa mẫu ngay.

Ví dụ

JSON này:

{ "id": 7, "name": "Ada", "tags": ["admin"], "manager": { "id": 1, "email": null } }

trở thành các khai báo sau:

export interface Root {
  id: number;
  name: string;
  tags: string[];
  manager: Manager;
}

export interface Manager {
  id: number;
  email: null;
}

Mẹo

  • Một mẫu chỉ thể hiện những gì nó chứa. Nếu một trường có thể là chuỗi hoặc null, hãy đưa vào ví dụ cho cả hai, hoặc đặt nhiều mẫu vào một mảng để chúng được gộp.
  • Tên trường không phải định danh hợp lệ, như first-name, được viết trong dấu ngoặc kép nên kết quả luôn biên dịch được.
  • Kết quả chỉ là điểm khởi đầu. Hãy thu hẹp trường chuỗi thành kiểu hợp của literal hoặc Date khi bạn biết nhiều hơn mẫu.
  • Cần Go? Công cụ chuyển JSON sang Go dùng cùng cách suy luận để viết struct kèm thẻ json.

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

› Đối tượng lồng nhau được xử lý thế nào?

Mỗi đối tượng lồng nhau trở thành một interface riêng có tên lấy từ khóa ở dạng PascalCase, nên trường address tạo ra interface Address. Các đối tượng có cấu trúc giống hệt nhau dùng chung một interface, còn tên bị trùng sẽ được thêm số, như Address2.

› Mảng được gán kiểu thế nào?

Mọi phần tử của mảng được gộp thành một kiểu phần tử. Mảng đối tượng trở thành mảng của một interface đặt theo dạng số ít của khóa, nên orders cho ra Order[]. Mảng hỗn hợp trở thành kiểu hợp như (string | number)[], còn mảng rỗng thành unknown[].

› Khi nào một trường được đánh dấu là tùy chọn?

Khi nó vắng mặt ở một số đối tượng trong mảng. Trường có ở mọi nơi nhưng đôi khi là null mặc định được viết là T | null. Chuyển giá trị null sang tùy chọn để bỏ null và đánh dấu trường là tùy chọn bằng dấu chấm hỏi.

› Nên chọn interface hay type?

Cả hai mô tả cùng các dạng đối tượng. Interface có thể mở rộng và gộp, và nhiều hướng dẫn phong cách ưu tiên chúng cho kiểu đối tượng. Type alias tiện khi bạn định kết hợp kết quả với kiểu hợp hoặc mapped type. Hãy chọn theo quy ước của dự án.

› JSON của tôi có bị gửi lên máy chủ không?

Không. Kiểu được suy luận ngay trong trình duyệt, nên bạn có thể yên tâm dán phản hồi API thật.