问题描述
我正在从 Angular 5 tp 10 迁移我的应用程序,迁移后我收到错误 此条件将始终返回 'false',因为类型 'string' 和 'number' 没有重叠。 即使在我们使用的代码中 == 不是 === ,我是否应该知道 angular 10 的一些新配置或功能
已经没有意义了
我知道我可以在我的号码上添加单引号,但是 == 在 html/template 中表现得像 === 的逻辑是什么。
为什么 angular 5 没有错误?
解决方法
Angular 10 使用 Ivy AoT 进行编译。与旧的 JiT 引擎相比,它在编译时强制要求类型构造(包括在模板中)。
Ivy 刚刚通知您,条件从一开始就是错误的。如果 roleId
的类型为 string
,那么它应该与类型 string
而不是数字进行比较。
roleId == '2'
尝试使用 roleId == 2
时,您依赖 Javascript 的 ToNumber
将 roleId
隐式转换为数字。有关抽象相等比较 here 的更多详细信息。这在将 Ivy 与 Typescript 结合使用时效果不佳。