javascript - ความสับสนเกี่ยวกับตรรกะของ "เงื่อนไขนี้จะส่งค่ากลับเป็น 'false' เสมอ เนื่องจากประเภท '"a"' และ '"b"' ไม่มีการทับซ้อนกัน."
ฉันเพิ่งเริ่มเรียน TypeScript และตอนนี้ฉันกำลังอ่านคู่มือ หนึ่งในประเด็นที่มันกล่าวถึงคือ TypeScript สามารถจับข้อผิดพลาดทางตรรกะได้ และมันให้ตัวอย่างนี้:
const value = Math.random() < 0.5 ? "a" : "b";
if (value !== "a") {
// ...
} else if (value === "b") {
// This condition will always return 'false' since
// the types '"a"' and '"b"' have no overlap.
// Oops, unreachable
}
บางทีอาจมีบางสิ่งที่ฉันมองไม่ชัดเจน แต่ฉันไม่เข้าใจว่าทำไมสิ่งนี้ถึงทำให้เกิดข้อผิดพลาด นี่คือสิ่งที่ฉันเห็น:
valueสามารถเป็นได้ทั้งaหรือb- คำสั่ง if แรกตรวจสอบดูว่า
valueไม่ใช่a - คำสั่ง else-if ตรวจสอบว่าค่า คือ
bซึ่งมันจะเป็นเช่นนั้นเสมอถ้ามันไม่ใช่a(ถ้าvalueไม่ใช่aมันก็จะเป็นb)
แล้วทำไมถึงบอกว่า value === "b" จะคืนค่า false อยู่เสมอ? ชัดเจนว่ามันไม่ได้ทำงานในแบบที่ฉันมองเห็น; ดูเหมือนว่ามีบางอย่างที่ฉันพลาดไป นอกจากนี้ฉันก็ไม่แน่ใจอย่างเต็มที่ว่า overlap ใน '"a"' and '"b"' have no overlap หมายถึงอะไร ดังนั้นถ้าใครช่วยอธิบายให้ฉันเข้าใจ จะขอบคุณมาก