我在Angular项目中引入了strictNullchecks
编译器选项,并且遇到了这个问题。
错误TS2345:“字符串|类型”的参数未定义”不能分配给“字符串”类型的参数。
replaceTokens(menuItemList: MenuItem[]): MenuItem[] {
for (let i = 0; i < menuItemList.length; i++) {
if (menuItemList[i].route) {
menuItemList[i].route = this.tokenizer.replace(
menuItemList[i].route <-- Error here
// menuItemList[i].route as string <-- No error here
);
}
}
return menuItemList;
}
在上面的代码中,我在使用menuItemList[i].route
之前先检查是否已定义,但是仍然出现上面概述的错误。
如果我将其强制转换为string
,那么它将解决此问题,但是我认为这是一个不好的解决方法,因为我已经确认它不能undefined
if语句,因此它必须为string
类型。
我认为问题可能与MenuItem.route?
是可选的事实有关,但由于我前面提到的原因,undefined
不能成为if
,所以看不到这是为什么tar --sort=name --owner=root:0 --group=root:0 --mtime='UTC 2019-01-01' ...
检查。