UTILS.
ทำงานในเบราว์เซอร์ 100%
📘

JSON Schema เป็น TypeScript

คอมไพล์ JSON Schema (draft-07 หรือ 2020-12) เป็น interface และ type alias ของ TypeScript รองรับ required, enum, $ref, อาร์เรย์ และ combinator

ผลลัพธ์

เกี่ยวกับเครื่องมือนี้

เครื่องมือ JSON Schema เป็น TypeScript คอมไพล์เอกสาร JSON Schema เป็น interface และ type alias ของ TypeScript ทำสิ่งที่ไลบรารียอดนิยม json-schema-to-typescript ทำโดยไม่ต้องติดตั้ง toolchain ต่างจากตัวแปลง JSON ตัวอย่าง เครื่องมือนี้อ่าน schema จริง: มันวนอ่าน object ของ schema และเปลี่ยน type:'object' เป็น interface ที่คีย์ในรายการ required เป็นแบบไม่ optional และที่เหลือถูกทำเครื่องหมายด้วย ?

ทุกอย่างถูกแยกวิเคราะห์และสร้างภายในเบราว์เซอร์ของคุณด้วย JSON.parse และ JavaScript ธรรมดา ดังนั้น schema ของคุณจะไม่ออกจากหน้าเว็บ schema แบบ string ที่มี enum กลายเป็น union ของ string literal; string, number/integer, boolean และ null ธรรมดาจับคู่กับสิ่งที่เทียบเท่าใน TypeScript; อาร์เรย์กลายเป็น T[] (เป็น tuple เมื่อ items เป็นอาร์เรย์) รองรับ combinator — allOf กลายเป็น intersection (A & B) และ anyOf / oneOf กลายเป็น union (A | B) — และชนิด nullable type:[T,'null'] กลายเป็น T | null

การอ้างอิงถูก resolve ตามชื่อ: $ref ที่ชี้ไปที่ #/definitions/X หรือ #/$defs/X สร้างการอ้างอิงชนิดที่มีชื่อ และทุก definition ถูกสร้างเป็น export interface หรือ export type ของตัวเอง additionalProperties เพิ่ม index signature [key: string]: T ชื่อชนิด root จะกลับไปใช้ title หรือ $id ของ schema สลับผลลัพธ์ระหว่าง interface กับ type และว่าจะให้สตริง description ของ schema กลายเป็นคอมเมนต์ JSDoc /** */ หรือไม่ คัดลอกผลลัพธ์หรือดาวน์โหลดไฟล์ .ts

คำถามที่พบบ่อย

รองรับฟีเจอร์ JSON Schema ใดบ้าง?
object พร้อม properties และ required, enum ของ string เป็น literal union, number/integer/boolean/null, อาร์เรย์ (รวมถึง tuple), combinator allOf/anyOf/oneOf, $ref ไปยัง definitions หรือ $defs, additionalProperties เป็น index signature และอาร์เรย์ชนิด nullable อย่าง ["string","null"]
$ref และ definitions ถูกจัดการอย่างไร?
$ref เช่น #/definitions/Address (หรือ #/$defs/Address) กลายเป็นการอ้างอิงไปยังชนิดที่มีชื่อ Address และแต่ละรายการภายใต้ definitions หรือ $defs ถูกสร้างเป็น export interface หรือ export type ของตัวเอง การอ้างอิงจึง resolve ได้ภายในผลลัพธ์
อะไรตั้งชื่อชนิด root?
ช่องชื่อ root หากคุณตั้งไว้ มิฉะนั้นเป็น title ของ schema มิฉะนั้นเป็นส่วนสุดท้ายของ $id มิฉะนั้นเป็น Root ชื่อ definition มาจากคีย์ของมันใน definitions หรือ $defs ที่แปลงเป็น PascalCase
ฉันเก็บ description ของ schema ได้ไหม?
ได้ เมื่อเปิด JSDoc (ค่าเริ่มต้น) สตริง description ใด ๆ บน schema หรือพร็อพเพอร์ตี้จะถูกสร้างเป็นคอมเมนต์ /** ... */ เหนือชนิดหรือฟิลด์ที่สอดคล้องกัน โดยคงเอกสารไว้ใน TypeScript ที่สร้าง

เครื่องมือเพิ่มเติม