JSON เป็น TypeScript

วางตัวอย่าง JSON แล้วเครื่องมือจะอนุมานอินเทอร์เฟซ TypeScript ที่ตรงกับโครงสร้างของข้อมูล ฟิลด์จะถูกกำหนดชนิดตามค่าที่ตรวจพบ (string, number, boolean, Array<T>) อ็อบเจกต์แบบซ้อนจะได้อินเทอร์เฟซที่มีชื่อเป็นของตัวเอง ส่วนฟิลด์ที่ตรวจพบว่าเป็น null หรือขาดหายไปจะกลายเป็นแบบเลือกได้ (?) หรือแบบเป็น null ได้ (| null) ขึ้นอยู่กับรูปแบบที่คุณเลือก

วิธีแปลง JSON เป็น TypeScript

  1. 1

    วาง JSON

    ตัวอย่างเพียงชุดเดียวก็เพียงพอ แต่การใส่หลายชุดจะช่วยเพิ่มความแม่นยำในการอนุมานความเป็น null ได้และชนิดยูเนียน

  2. 2

    เลือกรูปแบบผลลัพธ์

    `interface` (ค่าเริ่มต้น), นามแฝง `type` หรืออินเทอร์เฟซแบบอ่านอย่างเดียวที่ทุกฟิลด์ถูกกำหนดเป็น `readonly`

  3. 3

    เลือกกลยุทธ์แบบเลือกได้/null

    กำหนดให้ฟิลด์เป็น `?` (อาจไม่มีอยู่) หรือ `| null` (มีอยู่เสมอ แต่อาจเป็น null)

  4. 4

    คัดลอกชนิดข้อมูล

    วางลงในไฟล์ `.ts` แล้วคุณจะเข้าถึงข้อมูลตอบกลับจาก API ได้อย่างมีการกำหนดชนิดที่รัดกุม

ตัวอย่าง

ข้อมูลเข้า:

{ "id": 1, "name": "Alice", "age": null, "tags": ["admin", "user"], "address": { "city": "Madrid" } }

ผลลัพธ์:

interface User {
  id: number;
  name: string;
  age: number | null;
  tags: string[];
  address: Address;
}

interface Address {
  city: string;
}

การแมปชนิดข้อมูล

JSON TypeScript
สตริง string
จำนวนเต็ม / ทศนิยม number
บูลีน boolean
null อย่างเดียว null
null + T T | null (หรือ T?)
อาร์เรย์ของ T T[]
อาร์เรย์ผสม (T1 | T2)[]
อ็อบเจกต์ อินเทอร์เฟซแบบซ้อนที่มีชื่อ
อาร์เรย์ว่าง unknown[] (อนุมานไม่ได้)

ฟิลด์แบบเลือกได้ เทียบกับ ฟิลด์แบบเป็น null ได้

  • foo?: string, ฟิลด์นี้อาจไม่มีอยู่ในอ็อบเจกต์ ต้องมีการตรวจสอบค่า undefined
  • foo: string | null, ฟิลด์นี้มีอยู่เสมอ แต่อาจถูกกำหนดเป็น null อย่างชัดเจน
  • foo?: string | null, อาจไม่มีอยู่ หรืออาจเป็น null

JSON เองไม่มีค่า undefined แต่แต่ละ API มีวิธีบ่งบอกการขาดค่านี้แตกต่างกัน โปรดปรับให้ตรงกับความหมายของ API ที่คุณใช้

  • API แบบ REST มักจะละฟิลด์ที่ขาดหายไป -> ?:
  • GraphQL จะคืนทุกฟิลด์ที่ร้องขอเสมอ -> | null
  • SDK บางตัวใช้ทั้งสองแบบในบริบทที่ต่างกัน

ชนิดยูเนียน เทียบกับ ชนิดลิเทอรัล

หากเครื่องมือพบว่าฟิลด์สตริงเดียวกันมีค่าเพียงไม่กี่ค่าในตัวอย่างต่าง ๆ ("status": "pending", "active", "archived") เครื่องมือสามารถสร้างเป็นยูเนียนของสตริงลิเทอรัลได้

status: "pending" | "active" | "archived";

หากต้องการพฤติกรรมนี้ ให้เปิดตัวเลือก “อนุมานยูเนียนของสตริงลิเทอรัล”

ข้อผิดพลาดที่พบบ่อย

  • การอนุมานจากตัวอย่างเพียงชุดเดียว ทุกฟิลด์จะกลายเป็นฟิลด์ที่จำเป็น และไม่สามารถสังเกตความเป็น null ได้ เพื่อให้ได้ชนิดข้อมูลที่ดีขึ้น ให้ใส่ตัวอย่างที่หลากหลาย 5-10 ชุด
  • อาร์เรย์ว่าง "tags": [] ไม่ให้ข้อมูลชนิดใด ๆ เครื่องมือจึงสร้างเป็น unknown[] โปรดใส่ตัวอย่างที่มีอย่างน้อยหนึ่งองค์ประกอบ
  • อาร์เรย์ชนิดผสม [1, "two", true] สร้างเป็น (number | string | boolean)[] โดยทั่วไปหมายความว่าควรออกแบบ JSON ใหม่ แทนที่จะกำหนดชนิดให้ตามเดิม
  • คีย์ที่เป็นสตริงตัวเลข JSON {"1": "a", "2": "b"} ยังคงเป็นอ็อบเจกต์ใน TypeScript (Record<string, string>) ไม่ใช่อาร์เรย์ เครื่องมือจัดการกรณีนี้ได้อย่างถูกต้อง

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

ให้เลือกตาม API ของคุณ API แบบ REST ที่ตัดฟิลด์ที่เป็น null ออกควรใช้ ?: ส่วน GraphQL ซึ่งคืนทุกฟิลด์ที่เลือกไว้เสมอควรใช้ | null หากไม่แน่ใจ การใช้ T | null แบบไวยากรณ์บังคับจะเข้มงวดกว่าและจับข้อผิดพลาดได้มากขึ้นในระหว่างการคอมไพล์

ได้ หากคุณเปิดใช้งานและใส่ตัวอย่างหลายชุด ฟิลด์ที่พบค่าสตริงต่างกัน 2-5 ค่าในตัวอย่างต่าง ๆ จะถูกสร้างเป็นยูเนียนลิเทอรัล หากเกินเกณฑ์นี้ ระบบจะย้อนกลับไปใช้ string

ในกรณีส่วนใหญ่ควรใช้ interface เพราะเปิดกว้างต่อการขยายและ TypeScript จะปรับให้เหมาะสมได้ดีกว่า ส่วนนามแฝง type มีประโยชน์สำหรับยูเนียน อินเตอร์เซกชัน ทูเพิล และชนิดแบบแมป สำหรับชนิดที่ได้จาก JSON ใช้ได้ทั้งสองแบบ ให้เลือกตามแนวปฏิบัติของโปรเจกต์

ได้ อ็อบเจกต์ที่ซ้อนกันแต่ละชุดจะกลายเป็นอินเทอร์เฟซของตัวเอง โดยชื่อจะได้มาจากคีย์ (user.address -> Address) สำหรับโครงสร้างที่ลึกมากหรือซ้ำ ๆ ควรพิจารณาใช้ JSON Schema ร่วมกับเครื่องมือสร้างจาก schema เป็น TS โดยเฉพาะ

เครื่องมือที่เกี่ยวข้อง

ตารางอ้างอิง ASCII

ตาราง ASCII ครบตั้งแต่ 0 ถึง 127 พร้อมค่าเลขฐานสิบ ฐานสิบหก ฐานแปด ฐานสอง และรูปแบบการอ้างอิงอักขระแบบตัวเลขของ HTML รวม NUL, LF และ DEL

อ้างอิงตัวอักษร HTML

รายการที่สามารถค้นหาได้ขององค์ประกอบ HTML พร้อมรหัสชื่อและรหัสตัวเลข รวมถึงฟังก์ชันสำเนาด้วยคลิกเดียวสำหรับตัวอักษรพิเศษและสัญลักษณ์ต่างๆ

ตารางอ้างอิงแป้นพิมพ์ลัด

ค้นหาแป้นพิมพ์ลัดเริ่มต้นตามเอกสารของ VS Code, Chrome และ Bash ที่ใช้ GNU Readline บน macOS, Windows และ Linux

ตัวตรวจสอบอีเมล

ตรวจสอบที่อยู่อีเมล: ตรวจไวยากรณ์ RFC 5322 ค้นหา MX เรกคอร์ดแบบเรียลไทม์ พร้อมรายละเอียดส่วนท้องถิ่น โดเมน และความยาว ไม่มีการส่งอีเมลใด ๆ

เครื่องสร้างตัวอักษรสุ่ม

สร้างตัวอักษร A-Z แบบสุ่ม เลือกจำนวน ตัวพิมพ์ใหญ่ ตัวพิมพ์เล็ก หรือแบบผสม แล้วใช้กับเกม โจทย์ หรือกิจกรรมในห้องเรียน

เครื่องมือสร้าง EditorConfig

สร้างไฟล์ .editorconfig ด้วยกฎสไตล์และขนาดการเยื้อง การจบบรรทัด ชุดอักขระ และช่องว่างของคุณ เพื่อให้การจัดรูปแบบสอดคล้องกันในทุก IDE และโปรแกรมแก้ไข

เครื่องมือนี้มีให้บริการในภาษาอื่น