JSON เป็น TypeScript
วางตัวอย่าง JSON แล้วเครื่องมือจะอนุมานอินเทอร์เฟซ TypeScript ที่ตรงกับโครงสร้างของข้อมูล ฟิลด์จะถูกกำหนดชนิดตามค่าที่ตรวจพบ (string, number, boolean, Array<T>) อ็อบเจกต์แบบซ้อนจะได้อินเทอร์เฟซที่มีชื่อเป็นของตัวเอง ส่วนฟิลด์ที่ตรวจพบว่าเป็น null หรือขาดหายไปจะกลายเป็นแบบเลือกได้ (?) หรือแบบเป็น null ได้ (| null) ขึ้นอยู่กับรูปแบบที่คุณเลือก
วิธีแปลง JSON เป็น TypeScript
-
1
วาง JSON
ตัวอย่างเพียงชุดเดียวก็เพียงพอ แต่การใส่หลายชุดจะช่วยเพิ่มความแม่นยำในการอนุมานความเป็น null ได้และชนิดยูเนียน
-
2
เลือกรูปแบบผลลัพธ์
`interface` (ค่าเริ่มต้น), นามแฝง `type` หรืออินเทอร์เฟซแบบอ่านอย่างเดียวที่ทุกฟิลด์ถูกกำหนดเป็น `readonly`
-
3
เลือกกลยุทธ์แบบเลือกได้/null
กำหนดให้ฟิลด์เป็น `?` (อาจไม่มีอยู่) หรือ `| null` (มีอยู่เสมอ แต่อาจเป็น null)
-
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, ฟิลด์นี้อาจไม่มีอยู่ในอ็อบเจกต์ ต้องมีการตรวจสอบค่าundefinedfoo: 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 และโปรแกรมแก้ไข
เครื่องมือนี้มีให้บริการในภาษาอื่น
- JSON ke TypeScript [ID]
- JSON sang TypeScript [VI]
- JSON a TypeScript [ES]
- JSON vers TypeScript [FR]
- JSON에서 TypeScript로 [KO]
- JSON naar TypeScript [NL]
- JSON till TypeScript [SV]
- JSONからTypeScriptへ [JA]
- تحويل JSON إلى TypeScript [AR]
- JSON zu TypeScript [DE]
- JSON do TypeScript [PL]
- JSON para TypeScript [PT]
- JSON a TypeScript [IT]
- JSON в TypeScript [RU]
- JSON'dan TypeScript'e [TR]
- JSON 转 TypeScript [ZH]
- JSON to TypeScript [EN]