ค้นหาเว็บไซต์

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 หมายถึงอะไร ดังนั้นถ้าใครช่วยอธิบายให้ฉันเข้าใจ จะขอบคุณมาก

บทความที่เกี่ยวข้อง