我们的代码中的错误最终是由以下原因引起的。该方法的输出与0进行比较并返回false。该方法显式声明一个数字返回类型,但允许返回字符串。我本来希望在编译器和lint之间的某个点将其标记为错误,但从未被捕获。
比较:
if(routerIdParameter() === 0) {
console.log('They match');
} else {
console.log('They do not match');
}
方法:
public routerIdParameter(): number {
if (this.route.snapshot.paramMap.has('id')) {
return this.route.snapshot.params['id'];
} else {
return 0;
}
}
显然问题行是返回this.route.snapshot.params ['id'] 。 params类型是 [key:string]:任何,因此它不知道类型,在这里我以为类型检查会抱怨。 用 + 作为前缀很容易,但是我更担心在理解为什么允许它方面的空白。
对于这种情况为什么发生或如何使其出错的任何解释,我都会很感激,因为我担心整个应用程序中可能会有更多这种情况。
在打字稿2.3.4中已标识,但在3.1.6中也已复制
this.route是从@ angular / router导入的ActivatedRoute类型
答案 0 :(得分:4)
any
可以分配给任何类型,也可以分配给任何类型。没有编译器设置可以使其更严格。
在可能的情况下,您应该首选unknown
(在打字稿3.0中引入),它可以从任何类型分配,但不能分配给任何类型(有关any
与{{ 1}})。
关于如何避免这种行为,我建议研究tslint规则here