การตรวจสอบความครบถ้วนด้วย 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 ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ
บทเรียนทั้งหมดในหลักสูตรนี้
- typeof ความเท่ากัน และการจำกัดชนิดข้อมูลด้วยค่าจริงเท็จ
- in, instanceof และยูเนียนแบบจำแนก
- การตรวจสอบความครบถ้วนด้วย never (เบื้องต้น)