0Pricing
TypeScript Academy · บทเรียน

ชนิดข้อมูลค่า 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 ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ

บทเรียนทั้งหมดในหลักสูตรนี้

  1. การกำหนดชนิดข้อมูลแบบเรียกซ้ำ
  2. การกำหนดชนิดข้อมูลให้โครงสร้างต้นไม้
  3. ชนิดข้อมูลค่า JSON
  4. ความลึกและขีดจำกัดของการเรียกซ้ำ
← กลับไปที่ TypeScript Academy