DevToolPal
ไทย

แปลง JSON เป็น TypeScript

สร้าง interface หรือ type ของ TypeScript จากตัวอย่าง JSON รองรับชนิดซ้อนกัน ฟิลด์ที่ไม่บังคับ และค่า null

ทำงานในเครื่อง ไม่มีการอัปโหลด

ตัวเลือก

ประกาศเป็น
ค่า null

JSON

0 ตัวอักษร · 0 B

TypeScript

0 ตัวอักษร · 0 B

เครื่องมือนี้ทำอะไร

ตัวสร้าง JSON เป็น TypeScript อ่านตัวอย่าง JSON เช่น ข้อมูลตอบกลับจาก API หรือไฟล์ตั้งค่า แล้วเขียน interface ของ TypeScript ที่อธิบายข้อมูลนั้น แทนที่จะพิมพ์ทุกฟิลด์เอง เพียงวางข้อมูลตอบกลับจริงหนึ่งชุดก็ได้ชนิดที่นำไปใช้ในโค้ดได้ทันที สำหรับผลลัพธ์ของ fetch สถานะของ Redux หรือข้อมูลทดสอบ

ตัวสร้างจะตรวจดูทุกค่า ไม่ใช่แค่ค่าแรก ตัวเลขกลายเป็น number ข้อความกลายเป็น string ออบเจ็กต์ที่ซ้อนกันได้ interface ของตัวเอง และสมาชิกของอาร์เรย์จะถูกรวมกัน ฟิลด์ที่มีเฉพาะบางสมาชิกจึงถูกทำเครื่องหมายว่าไม่บังคับ และฟิลด์ที่บางครั้งเป็น null จะได้ชนิดที่รับ null ได้

วิธีใช้

  1. วาง JSON ลงในช่องป้อนข้อมูล อัปโหลดไฟล์ .json หรือคลิก ตัวอย่าง
  2. ตั้งชื่อชนิดรากและเลือกสไตล์ ได้แก่ interface หรือ type เขียน null เป็น | null หรือเป็นฟิลด์ไม่บังคับ พร็อพเพอร์ตี readonly และจะใส่ export ให้ทุกการประกาศหรือไม่
  3. คัดลอก 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 จริงได้อย่างปลอดภัย