0

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检查。

4

0 回答 0