打字稿不检测空检查和抱怨参数不可分配

时间:2018-04-26 05:15:10

标签: typescript 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);
  }
}

2 个答案:

答案 0 :(得分:5)

如果您完全确定运算符不为空,则可以使用non-null assertion operator!):

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

在此问题上有关于此运算符的更多信息:In Typescript, what is the ! (exclamation mark / bang) operator when dereferencing a member?

答案 1 :(得分:2)

作为另一种解决方案,您可以将数组值存储在变量中,它将解决您的问题:

const child = node.children[i];

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