所以我有一个需要某种非可空类型的函数。在调用函数之前,我检查输入参数是否为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);
}
}
答案 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);
}