我strictNullchecks
在我们的 Angular 项目中引入了编译器选项,并且遇到了这个问题。
错误 TS2345:类型为“字符串”的参数 | undefined' 不能分配给'string' 类型的参数。
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
在使用它之前检查了它的定义,但是我仍然收到上面列出的错误。
如果我将它转换为 astring
那么它将解决问题,但我认为这是一个不好的解决方法,因为我已经确认它不能undefined
在 if 语句中,所以它必须是string
类型。
我相信这个问题可能与MenuItem.route?
可选的事实有关,但不明白为什么这是一个问题,因为我之前提到过这不可能是undefined
由于if
检查。