UTILS.
100% trong trình duyệt
📘

JSON Schema sang TypeScript

Biên dịch một JSON Schema (draft-07 hoặc 2020-12) thành các interface và bí danh kiểu TypeScript, xử lý required, enum, $ref, mảng, và các bộ kết hợp.

đầu ra

Về công cụ này

Công cụ JSON Schema sang TypeScript biên dịch một tài liệu JSON Schema thành các interface và bí danh kiểu TypeScript, làm điều mà thư viện json-schema-to-typescript phổ biến làm mà không cần cài đặt bộ công cụ. Khác với các bộ chuyển đổi JSON-mẫu, cái này đọc một schema thực sự: nó duyệt đối tượng schema và biến type:'object' thành một interface trong đó các khóa liệt kê trong required là không tùy chọn và phần còn lại được đánh dấu bằng ?.

Mọi thứ được phân tích và sinh ra cục bộ trong trình duyệt của bạn với JSON.parse và JavaScript thuần, nên schema của bạn không bao giờ rời khỏi trang. Các schema chuỗi có enum trở thành một hợp (union) của các chuỗi literal; string, number/integer, boolean, và null thuần ánh xạ sang các tương đương TypeScript của chúng; mảng trở thành T[] (một tuple khi items là một mảng). Các bộ kết hợp được hỗ trợ — allOf trở thành một giao (A & B) và anyOf / oneOf trở thành các hợp (A | B) — và một kiểu nullable type:[T,'null'] trở thành T | null.

Các tham chiếu được giải quyết theo tên: $ref trỏ tới #/definitions/X hoặc #/$defs/X phát ra một tham chiếu kiểu được đặt tên, và mọi định nghĩa được sinh ra như một export interface hoặc export type riêng. additionalProperties thêm một chữ ký chỉ mục [key: string]: T. Tên kiểu gốc lùi về title hoặc $id của schema. Bật/tắt output interface-hay-type và việc các chuỗi description của schema có trở thành chú thích JSDoc /** */ hay không. Sao chép kết quả hoặc tải xuống một tệp .ts.

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

Những tính năng JSON Schema nào được hỗ trợ?
object với properties và required, string enum thành các hợp literal, number/integer/boolean/null, mảng (bao gồm tuple), các bộ kết hợp allOf/anyOf/oneOf, $ref tới definitions hoặc $defs, additionalProperties thành một chữ ký chỉ mục, và các mảng kiểu nullable như ["string","null"].
$ref và definitions được xử lý như thế nào?
Một $ref như #/definitions/Address (hoặc #/$defs/Address) trở thành một tham chiếu tới kiểu được đặt tên Address, và mỗi mục dưới definitions hoặc $defs được phát ra như một export interface hoặc export type riêng, nên các tham chiếu giải quyết được trong output.
Điều gì đặt tên cho kiểu gốc?
Ô tên gốc nếu bạn đặt, nếu không thì title của schema, nếu không thì đoạn cuối của $id của nó, nếu không thì Root. Tên các định nghĩa đến từ khóa của chúng trong definitions hoặc $defs, được chuyển sang PascalCase.
Tôi có thể giữ các description của schema không?
Có. Với JSDoc bật (mặc định), bất kỳ chuỗi description nào trên schema hoặc một thuộc tính được phát ra như một chú thích /** ... */ phía trên kiểu hoặc trường tương ứng, giữ lại tài liệu trong TypeScript được sinh ra.

Công cụ khác