ชนิดข้อมูลค่า JSON
กำหนดชนิดข้อมูลค่า JSON ที่สมบูรณ์และปลอดภัยด้านชนิดข้อมูล
ชนิดข้อมูลค่า JSON เป็นบทเรียน TypeScript Academy ฟรีบน CoddyKit นี่คือบทเรียนที่ 3 จากทั้งหมด 4 บทเรียน คุณสามารถอ่านบทเรียนทั้งหมดด้านล่างฟรี — จากนั้นลองปฏิบัติด้วยตัวคุณเองในเบราว์เซอร์พร้อมตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7 บทเรียนนี้เป็นส่วนหนึ่งของเส้นทางการเรียน TypeScript Academy และความก้าวหน้าของคุณจะซิงค์ข้ามเว็บและแอป CoddyKit คอร์ส TypeScript Academy มีบทเรียนทั้งหมด 4 บทเรียน
ค่าของเจสันคืออะไร
เจสันอนุญาตให้ใช้รูปแบบค่าได้จำนวนจำกัด ได้แก่ สตริง ตัวเลข ค่าบูลีน ค่า null อาร์เรย์ และออบเจ็กต์ ชนิดข้อมูลแบบเรียกซ้ำสามารถอธิบายชุดค่านี้ได้ตรงตามความเป็นจริง
type Json =
| string
| number
| boolean
| null
| Json[]
| { [k: string]: Json };
// arrays and objects nest Json again.ชนิดข้อมูลเจสันแบบเรียกซ้ำ
แนวคิดสำคัญคือ อาร์เรย์ประกอบด้วย Json และค่าของออบเจ็กต์ก็เป็น Json ดังนั้นชนิดข้อมูลจึงอ้างอิงตัวเองเพื่อรองรับข้อมูลที่ซ้อนกัน
type Json =
| string | number | boolean | null
| Json[]
| { [k: string]: Json };
const x: Json = { name: "Ada", tags: ["a", "b"], active: true };
console.log(x);ค่าเจสันพื้นฐาน
ค่าเจสันที่เรียบง่ายที่สุดคือค่าพื้นฐาน แต่ละค่าสามารถกำหนดให้กับ Json ได้โดยตรง
type Json = string | number | boolean | null | Json[] | { [k: string]: Json };
const a: Json = "hello";
const b: Json = 42;
const c: Json = true;
const d: Json = null;
console.log(a, b, c, d);อาร์เรย์เจสัน
อาร์เรย์เจสันคือ Json[] จึงสามารถเก็บค่าเจสันชนิดใดก็ได้ปะปนกัน รวมถึงอาร์เรย์และออบเจ็กต์ที่ซ้อนกัน
type Json = string | number | boolean | null | Json[] | { [k: string]: Json };
const arr: Json = [1, "two", true, null, [3, 4]];
console.log(Array.isArray(arr));ออบเจ็กต์เจสัน
ออบเจ็กต์เจสันจับคู่คีย์สตริงกับค่า Json ผ่านลายเซ็นดัชนี จึงรองรับการซ้อนกันได้ทุกระดับ
type Json = string | number | boolean | null | Json[] | { [k: string]: Json };
const obj: Json = {
user: { name: "Ada", age: 36 },
scores: [10, 20, 30]
};
console.log(obj);เจสันที่ซ้อนกันลึก
เนื่องจากชนิดข้อมูลเป็นแบบเรียกซ้ำ โครงสร้างที่ซ้อนกันลึกจึงมีชนิดข้อมูลครบถ้วนโดยไม่ต้องประกาศเพิ่มเติม
type Json = string | number | boolean | null | Json[] | { [k: string]: Json };
const deep: Json = {
a: { b: { c: [1, { d: true }] } }
};
console.log(deep);สิ่งที่เจสันไม่รองรับ
ชนิดข้อมูล Json จะปฏิเสธค่าที่เจสันไม่สามารถแทนได้อย่างถูกต้อง เช่น undefined ฟังก์ชัน หรือออบเจ็กต์ Date
type Json = string | number | boolean | null | Json[] | { [k: string]: Json };
// const bad: Json = undefined; // Error
// const fn: Json = () => 1; // Error
const good: Json = { ok: true };
console.log(good);การตรวจสอบรูปแบบเจสันขณะทำงาน
ชนิดข้อมูลอธิบายเจสันที่ถูกต้องได้ แต่คุณยังต้องตรวจสอบข้อมูลขาเข้าที่ไม่น่าเชื่อถือขณะทำงาน ตัวตรวจสอบแบบเรียกซ้ำจะตรวจสอบทุกระดับ
type Json = string | number | boolean | null | Json[] | { [k: string]: Json };
function isJson(v: unknown): v is Json {
if (v === null) return true;
const t = typeof v;
if (t === "string" || t === "number" || t === "boolean") return true;
if (Array.isArray(v)) return v.every(isJson);
if (t === "object") return Object.values(v as object).every(isJson);
return false;
}
console.log(isJson({ a: [1, 2], b: "x" }));การแปลงเป็นชนิดข้อมูล Json
JSON.parse ส่งคืนค่าเป็น any ดังนั้นควรแปลงผลลัพธ์ที่ parsed เป็น Json หลังจากตรวจสอบแล้วเท่านั้น หรือกำหนดชนิดข้อมูลให้ตัวแปรแล้วตรวจสอบ
type Json = string | number | boolean | null | Json[] | { [k: string]: Json };
const raw = "{ \"id\": 1, \"tags\": [\"a\"] }";
const parsed = JSON.parse(raw) as Json;
console.log(parsed);การท่องผ่านค่า Json
ตัวท่องผ่านแบบเรียกซ้ำสามารถสำรวจค่าเจสันใด ๆ ได้ โดยจัดการค่าพื้นฐาน อาร์เรย์ และออบเจ็กต์ด้วยการตรวจสอบรูปแบบขณะทำงาน
type Json = string | number | boolean | null | Json[] | { [k: string]: Json };
function countLeaves(v: Json): number {
if (Array.isArray(v)) return v.reduce((a, x) => a + countLeaves(x), 0);
if (v !== null && typeof v === "object") return Object.values(v).reduce((a, x) => a + countLeaves(x), 0);
return 1;
}
console.log(countLeaves({ a: [1, 2], b: "x" }));เหตุผลที่ชนิดข้อมูล Json มีประโยชน์
ชนิดข้อมูล Json ที่แม่นยำจะบอกอย่างชัดเจนว่าค่าใดสามารถผ่านขอบเขตส่วนเชื่อมต่อโปรแกรมของคุณได้ และตรวจจับความพยายามทำให้ค่าที่ไม่ใช่เจสันเป็นข้อมูลอนุกรมตั้งแต่เวลาคอมไพล์
type Json = string | number | boolean | null | Json[] | { [k: string]: Json };
function send(payload: Json): string {
return JSON.stringify(payload);
}
console.log(send({ ok: true, items: [1, 2, 3] }));ตรวจสอบความเข้าใจอย่างรวดเร็ว: ชนิดค่าของเจสัน
ทดสอบความเข้าใจเกี่ยวกับชนิดค่าของเจสัน
สรุป: ชนิดค่าของเจสัน
คุณกำหนดชนิดข้อมูล Json แบบเรียกซ้ำที่ครอบคลุมค่าพื้นฐาน อาร์เรย์ และออบเจ็กต์ เรียนรู้สิ่งที่ชนิดข้อมูลนี้ไม่รองรับ และตรวจสอบข้อมูลขาเข้าที่ไม่น่าเชื่อถือด้วยตัวตรวจสอบชนิดข้อมูลแบบเรียกซ้ำ
type Json = string | number | boolean | null | Json[] | { [k: string]: Json };
const data: Json = { id: 1, tags: ["a", "b"] };
console.log(JSON.stringify(data));คำถามที่พบบ่อย
บทเรียน “ชนิดข้อมูลค่า JSON” ฟรีหรือไม่
ใช่ — ข้อความเต็มของ “ชนิดข้อมูลค่า JSON” ฟรีให้อ่านที่นี่บนเว็บ เพื่อปฏิบัติแบบโต้ตอบ (ตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7) และปลดล็อคส่วนที่เหลือของคอร์ส TypeScript Academy ให้อัปเกรดเป็น CoddyKit PRO คอร์ส TypeScript Academy มีบทเรียนทั้งหมด 4 บทเรียน
คุณจะเรียนรู้อะไรในบทเรียน “ชนิดข้อมูลค่า JSON”
กำหนดชนิดข้อมูลค่า JSON ที่สมบูรณ์และปลอดภัยด้านชนิดข้อมูล คุณปฏิบัติ TypeScript Academy ด้วยโค้ดที่ใช้งานได้จริงที่คุณเรียกใช้โดยตรงในเบราว์เซอร์ และติวเตอร์ AI ตลอด 24/7 ตอบคำถามของคุณขณะที่คุณไปผ่านบทเรียน
คุณต้องมีประสบการณ์ก่อนที่จะเริ่มเรียน TypeScript Academy หรือไม่
ไม่จำเป็นต้องมีประสบการณ์มาก่อน TypeScript Academy บน CoddyKit ออกแบบมาสำหรับผู้เริ่มต้นไปจนถึงผู้เรียนขั้นสูง คุณสามารถเริ่มต้นที่นี่หรือเริ่มจากตัวแรกและเรียนด้วยความเร็วของคุณเอง นี่คือบทเรียนที่ 3 จากทั้งหมด 4 บทเรียน
บทเรียน “ชนิดข้อมูลค่า JSON” ใช้เวลานานแค่ไหน
บทเรียน CoddyKit ส่วนใหญ่ใช้เวลาประมาณ 5–10 นาที แต่ละบทเรียนจึงสั้นและเป็นแบบโต้ตอบ คุณสามารถก้าวหน้าอย่างต่อเนื่องและกลับมาเรียนต่อจากตรงที่เพิ่งหยุดบนเว็บและแอปได้เลย
ฉันเขียนและรันโค้ดในบทเรียน TypeScript Academy นี้ได้ไหม
ได้ บทเรียน TypeScript Academy ทุกบทมีตัวแก้ไขโค้ดในตัว คุณจึงเขียนและรันโค้ดจริงได้เลยในเบราว์เซอร์ และได้รับข้อเสนอแนะจาก AI ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ
บทเรียนทั้งหมดในหลักสูตรนี้
- การกำหนดชนิดข้อมูลแบบเรียกซ้ำ
- การกำหนดชนิดข้อมูลให้โครงสร้างต้นไม้
- ชนิดข้อมูลค่า JSON
- ความลึกและขีดจำกัดของการเรียกซ้ำ