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

การตรวจสอบความครบถ้วนด้วย never (เบื้องต้น)

ใช้ never บังคับให้ switch ครอบคลุมทุกกรณีของยูเนียน และตรวจพบกรณีที่ขาดหายได้ตั้งแต่เนิ่น ๆ

การตรวจสอบความครบถ้วนด้วย never (เบื้องต้น) เป็นบทเรียน TypeScript Academy ฟรีบน CoddyKit นี่คือบทเรียนที่ 3 จากทั้งหมด 3 บทเรียน คุณสามารถอ่านบทเรียนทั้งหมดด้านล่างฟรี — จากนั้นลองปฏิบัติด้วยตัวคุณเองในเบราว์เซอร์พร้อมตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7 บทเรียนนี้เป็นส่วนหนึ่งของเส้นทางการเรียน TypeScript Academy และความก้าวหน้าของคุณจะซิงค์ข้ามเว็บและแอป CoddyKit คอร์ส TypeScript Academy มีบทเรียนทั้งหมด 3 บทเรียน

บทนำ

เป้าหมาย: ตรวจสอบให้แน่ใจว่าคำสั่ง switch จัดการสมาชิกทุกตัวของยูเนียน ชนิดข้อมูล neverช่วยให้คอมไพเลอร์แจ้งเตือนเมื่อไม่มีการจัดการกรณีใหม่

การเตรียมยูเนียน

สร้างยูเนียนที่มีตัวแยกแยะด้วยแท็กลิเทอรัล เช่น kind เพื่อใช้แยกกรณีในภายหลัง

type Circle = { kind: "circle"; radius: number };
type Square = { kind: "square"; size: number };

type Shape = Circle | Square;

คำสั่ง switch ไม่ครอบคลุมทุกกรณี

โค้ดที่ไม่มีแขนงบางกรณียังคอมไพล์ได้ แต่ตรรกะยังไม่สมบูรณ์ เราจึงต้องมีวิธีบังคับให้การคอมไพล์ล้มเหลวเมื่อไม่มีการจัดการกรณีใดกรณีหนึ่ง

function areaBad(s: Shape): number {
  switch (s.kind) {
    case "circle":
      return Math.PI * s.radius ** 2;
    // OOPS: forgot "square" -> no compile error yet
  }
  return 0; // silently wrong
}

console.log(areaBad({ kind: "circle", radius: 2 }));

ตัวช่วย assertNever

กำหนด assertNever ซึ่งรับเฉพาะ never เท่านั้น หากค่ามาถึงฟังก์ชันนี้ แสดงว่าคำสั่ง switch ไม่ได้ครอบคลุมทุกกรณี และคอมไพเลอร์จะแจ้งข้อผิดพลาด

function assertNever(x: never): never {
  throw new Error("Unhandled case: " + JSON.stringify(x));
}

คำสั่ง switch ที่ครอบคลุมทุกกรณี

เพิ่ม default ที่เรียกใช้ assertNever เมื่อมีสมาชิกใหม่ในยูเนียน คอมไพเลอร์จะบังคับให้คุณจัดการสมาชิกนั้น

function area(s: Shape): number {
  switch (s.kind) {
    case "circle":
      return Math.PI * s.radius ** 2;
    case "square":
      return s.size * s.size;
    default:
      return assertNever(s); // compiler error if a member is unhandled
  }
}

console.log(area({ kind: "square", size: 3 }));

แนวทาง

แนวทาง:

  • ใช้ตัวแยกแยะ เช่น kind กับสมาชิกของยูเนียน
  • คงรูปแบบ default + assertNever ไว้
  • ควรกำหนดชนิดข้อมูลผลลัพธ์ให้ชัดเจน เพื่อให้เห็นกรณีที่ขาดหายได้ง่าย

ตรวจสอบความครอบคลุมทุกกรณี

ตรวจสอบอย่างรวดเร็ว: คุณจะทำให้คำสั่ง switch ที่ใช้กับยูเนียนซึ่งมีตัวแยกแยะครอบคลุมทุกกรณีได้อย่างไร

ทบทวน

ทบทวน: never ระบุค่าที่เป็นไปไม่ได้ ใช้ assertNever ในแขนง default เพื่อบังคับให้คำสั่ง switch ครอบคลุมทุกกรณีและรองรับการเพิ่มกรณีในอนาคต

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

บทเรียน “การตรวจสอบความครบถ้วนด้วย never (เบื้องต้น)” ฟรีหรือไม่

ใช่ — ข้อความเต็มของ “การตรวจสอบความครบถ้วนด้วย never (เบื้องต้น)” ฟรีให้อ่านที่นี่บนเว็บ เพื่อปฏิบัติแบบโต้ตอบ (ตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7) และปลดล็อคส่วนที่เหลือของคอร์ส TypeScript Academy ให้อัปเกรดเป็น CoddyKit PRO คอร์ส TypeScript Academy มีบทเรียนทั้งหมด 3 บทเรียน

คุณจะเรียนรู้อะไรในบทเรียน “การตรวจสอบความครบถ้วนด้วย never (เบื้องต้น)”

ใช้ never บังคับให้ switch ครอบคลุมทุกกรณีของยูเนียน และตรวจพบกรณีที่ขาดหายได้ตั้งแต่เนิ่น ๆ คุณปฏิบัติ TypeScript Academy ด้วยโค้ดที่ใช้งานได้จริงที่คุณเรียกใช้โดยตรงในเบราว์เซอร์ และติวเตอร์ AI ตลอด 24/7 ตอบคำถามของคุณขณะที่คุณไปผ่านบทเรียน

คุณต้องมีประสบการณ์ก่อนที่จะเริ่มเรียน TypeScript Academy หรือไม่

ไม่จำเป็นต้องมีประสบการณ์มาก่อน TypeScript Academy บน CoddyKit ออกแบบมาสำหรับผู้เริ่มต้นไปจนถึงผู้เรียนขั้นสูง คุณสามารถเริ่มต้นที่นี่หรือเริ่มจากตัวแรกและเรียนด้วยความเร็วของคุณเอง นี่คือบทเรียนที่ 3 จากทั้งหมด 3 บทเรียน

บทเรียน “การตรวจสอบความครบถ้วนด้วย never (เบื้องต้น)” ใช้เวลานานแค่ไหน

บทเรียน CoddyKit ส่วนใหญ่ใช้เวลาประมาณ 5–10 นาที แต่ละบทเรียนจึงสั้นและเป็นแบบโต้ตอบ คุณสามารถก้าวหน้าอย่างต่อเนื่องและกลับมาเรียนต่อจากตรงที่เพิ่งหยุดบนเว็บและแอปได้เลย

ฉันเขียนและรันโค้ดในบทเรียน TypeScript Academy นี้ได้ไหม

ได้ บทเรียน TypeScript Academy ทุกบทมีตัวแก้ไขโค้ดในตัว คุณจึงเขียนและรันโค้ดจริงได้เลยในเบราว์เซอร์ และได้รับข้อเสนอแนะจาก AI ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ

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

  1. typeof ความเท่ากัน และการจำกัดชนิดข้อมูลด้วยค่าจริงเท็จ
  2. in, instanceof และยูเนียนแบบจำแนก
  3. การตรวจสอบความครบถ้วนด้วย never (เบื้องต้น)
← กลับไปที่ TypeScript Academy