เครื่องมือนี้ทำอะไร
ตัวสร้าง JSON เป็น TypeScript อ่านตัวอย่าง JSON เช่น ข้อมูลตอบกลับจาก API หรือไฟล์ตั้งค่า แล้วเขียน interface ของ TypeScript ที่อธิบายข้อมูลนั้น แทนที่จะพิมพ์ทุกฟิลด์เอง เพียงวางข้อมูลตอบกลับจริงหนึ่งชุดก็ได้ชนิดที่นำไปใช้ในโค้ดได้ทันที สำหรับผลลัพธ์ของ fetch สถานะของ Redux หรือข้อมูลทดสอบ
ตัวสร้างจะตรวจดูทุกค่า ไม่ใช่แค่ค่าแรก ตัวเลขกลายเป็น number ข้อความกลายเป็น string ออบเจ็กต์ที่ซ้อนกันได้ interface ของตัวเอง และสมาชิกของอาร์เรย์จะถูกรวมกัน ฟิลด์ที่มีเฉพาะบางสมาชิกจึงถูกทำเครื่องหมายว่าไม่บังคับ และฟิลด์ที่บางครั้งเป็น null จะได้ชนิดที่รับ null ได้
วิธีใช้
- วาง JSON ลงในช่องป้อนข้อมูล อัปโหลดไฟล์
.jsonหรือคลิก ตัวอย่าง - ตั้งชื่อชนิดรากและเลือกสไตล์ ได้แก่
interfaceหรือtypeเขียน null เป็น| nullหรือเป็นฟิลด์ไม่บังคับ พร็อพเพอร์ตีreadonlyและจะใส่exportให้ทุกการประกาศหรือไม่ - คัดลอก TypeScript หรือดาวน์โหลดเป็นไฟล์
.ts
JSON ที่ไม่ถูกต้องจะแจ้งบรรทัดและคอลัมน์ที่มีปัญหา เพื่อให้แก้ตัวอย่างได้ทันที
ตัวอย่าง
JSON นี้:
{ "id": 7, "name": "Ada", "tags": ["admin"], "manager": { "id": 1, "email": null } }
จะกลายเป็นการประกาศเหล่านี้:
export interface Root {
id: number;
name: string;
tags: string[];
manager: Manager;
}
export interface Manager {
id: number;
email: null;
}
เคล็ดลับ
- ตัวอย่างเดียวแสดงได้เฉพาะสิ่งที่มีอยู่ในนั้น หากฟิลด์อาจเป็นสตริงหรือ null ให้ใส่ตัวอย่างทั้งสองแบบ หรือนำหลายตัวอย่างใส่ในอาร์เรย์เพื่อให้รวมกัน
- ชื่อฟิลด์ที่ไม่ใช่ตัวระบุที่ถูกต้อง เช่น first-name จะเขียนในเครื่องหมายคำพูด ผลลัพธ์จึงคอมไพล์ได้เสมอ
- ผลลัพธ์เป็นเพียงจุดเริ่มต้น หากคุณรู้มากกว่าตัวอย่าง ให้จำกัดฟิลด์สตริงเป็นยูเนียนของค่าคงที่หรือ
Date - ต้องการ Go? ตัวแปลง JSON เป็น Go ใช้การอนุมานแบบเดียวกันเพื่อเขียน struct พร้อมแท็ก json
คำถามที่พบบ่อย
› ออบเจ็กต์ที่ซ้อนกันจัดการอย่างไร?
ออบเจ็กต์ที่ซ้อนกันแต่ละตัวจะกลายเป็น interface ที่มีชื่อของตัวเอง ตั้งชื่อจากคีย์ในรูป PascalCase ดังนั้นฟิลด์ address จะได้ interface ชื่อ Address ออบเจ็กต์ที่มีโครงสร้างเหมือนกันทุกประการจะใช้ interface ร่วมกัน และชื่อที่ซ้ำกันจะมีตัวเลขต่อท้าย เช่น Address2
› อาร์เรย์กำหนดชนิดอย่างไร?
สมาชิกทั้งหมดของอาร์เรย์จะรวมเป็นชนิดสมาชิกเดียว อาร์เรย์ของออบเจ็กต์จะกลายเป็นอาร์เรย์ของ interface ที่ตั้งชื่อตามรูปเอกพจน์ของคีย์ เช่น orders ได้ Order[] อาร์เรย์ที่มีหลายชนิดปนกันจะกลายเป็นยูเนียนอย่าง (string | number)[] และอาร์เรย์ว่างจะเป็น unknown[]
› ฟิลด์จะถูกทำเครื่องหมายว่าไม่บังคับเมื่อใด?
เมื่อฟิลด์นั้นไม่มีในออบเจ็กต์บางตัวของอาร์เรย์ ฟิลด์ที่มีทุกที่แต่บางครั้งเป็น null จะเขียนเป็น T | null ตามค่าเริ่มต้น หากเปลี่ยนค่า null เป็นแบบไม่บังคับ จะตัด null ออกและทำเครื่องหมายฟิลด์ว่าไม่บังคับด้วยเครื่องหมายคำถาม
› ควรเลือก interface หรือ type?
ทั้งสองอธิบายรูปร่างของออบเจ็กต์ได้เหมือนกัน interface ขยายและรวมกันได้ และคู่มือสไตล์หลายแห่งแนะนำให้ใช้กับชนิดออบเจ็กต์ ส่วน type alias สะดวกเมื่อคุณจะนำผลลัพธ์ไปรวมกับยูเนียนหรือ mapped type เลือกตามที่โค้ดของคุณใช้อยู่
› JSON ของฉันถูกส่งไปยังเซิร์ฟเวอร์หรือไม่?
ไม่ การอนุมานชนิดทำในเบราว์เซอร์ของคุณ จึงวางข้อมูลตอบกลับจาก API จริงได้อย่างปลอดภัย