因此,我的功能需要某些不可撤销的类型。在调用该函数之前,我检查输入参数是否不是null,但显然是Typescript无法理解的,并抱怨说:
类型'Hermiteoctreenode的参数|未定义的"不能分配给" Hermiteoctreenode"类型的参数。
键入'undedined'不适合输入'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);
}
}
如果您绝对确定操作员不是null,则可以使用非零断言操作员(!
(:
if (node.children[i] !== null) {
rebuildOctreeNode(node, node.children[i]!, i);
}
在此问题上,还有有关此操作员的更多信息:在打字稿中,什么是!(感叹号/BANG(运算符时,在删除会员时?
作为另一个解决方案,您可以将数组值存储在变量中,它将解决您的问题:
const child = node.children[i];
if (child != null) {
rebuildOctreeNode(node, child, i);
}