此条件将始终返回 'false',因为类型 'string' 和 'number' 没有重叠即使有'=='

问题描述

我正在从 Angular 5 tp 10 迁移我的应用程序,迁移后我收到错误 此条件将始终返回 'false',因为类型 'string' 和 'number' 没有重叠。 即使在我们使用的代码中 == 不是 === ,我是否应该知道 angular 10 的一些新配置或功能

已经没有意义了

我知道我可以在我的号码上添加单引号,但是 == 在 html/template 中表现得像 === 的逻辑是什么。

为什么 angular 5 没有错误

enter image description here

解决方法

Angular 10 使用 Ivy AoT 进行编译。与旧的 JiT 引擎相比,它在编译时强制要求类型构造(包括在模板中)。

Ivy 刚刚通知您,条件从一开始就是错误的。如果 roleId 的类型为 string,那么它应该与类型 string 而不是数字进行比较。

roleId == '2'

尝试使用 roleId == 2 时,您依赖 Javascript 的 ToNumberroleId 隐式转换为数字。有关抽象相等比较 here 的更多详细信息。这在将 Ivy 与 Typescript 结合使用时效果不佳。