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

Typescript ไม่ตรวจสอบการตรวจสอบค่า null และแจ้งข้อผิดพลาดเกี่ยวกับอาร์กิวเมนต์ที่ไม่สามารถกำหนดค่าได้


ดังนั้นฉันมีฟังก์ชันที่ต้องการชนิดข้อมูลที่ไม่สามารถเป็นค่า null ได้ ก่อนเรียกฟังก์ชันฉันจะตรวจสอบว่าพารามิเตอร์อินพุตไม่เป็น null แต่ดูเหมือนว่า typescript จะไม่เข้าใจและแจ้งเตือนว่า:

อาร์กิวเมนต์ของประเภท 'HermiteOctreeNode | undefined' ไม่สามารถกำหนดให้กับพารามิเตอร์ของประเภท 'HermiteOctreeNode' ได้

ชนิด 'undefined' ไม่สามารถกำหนดค่าให้กับชนิด 'HermiteOctreeNode' ได้

if (node.nodeType !== NODE_TYPE_LEAF && node.nodeType !== NODE_TYPE_PSEUDO) {
for (let i = 0; i < node.children.length; i++) {
  if (node.children[i] != null) {
    rebuildOctreeNode(node, /* node.children[i]  HERE /*, i);
  }
}

คำตอบ #1

ถ้าคุณมั่นใจอย่างแน่นอนว่าตัวดำเนินการไม่ได้เป็นค่า null คุณสามารถใช้ตัวดำเนินการยืนยันไม่เป็น null (!) ได้:

if (node.children[i] !== null) {
    rebuildOctreeNode(node, node.children[i]!, i);
}

มีข้อมูลเพิ่มเติมเกี่ยวกับตัวดำเนินการนี้ในคำถามนี้: ใน Typescript ตัวดำเนินการ ! (เครื่องหมายตกใจ/bang) คืออะไรเมื่อทำการดีเรเฟอเรนซ์สมาชิก?

คำตอบ #2

อีกทางเลือกหนึ่ง คุณสามารถเก็บค่าของอาร์เรย์ในตัวแปร และมันจะช่วยแก้ปัญหาของคุณได้:

const child = node.children[i];

if (child != null) {
  rebuildOctreeNode(node, child, i);
}