Typescript未强制执行或检查返回类型
我们的代码中的一个bug最终是由以下原因引起的。方法的输出与0进行比较,并返回false。该方法显式声明数字返回类型,但允许返回字符串。我会在编译器和lint之间的某个时刻将其标记为错误,但不会被捕获 比较:Typescript未强制执行或检查返回类型,typescript,Typescript,我们的代码中的一个bug最终是由以下原因引起的。方法的输出与0进行比较,并返回false。该方法显式声明数字返回类型,但允许返回字符串。我会在编译器和lint之间的某个时刻将其标记为错误,但不会被捕获 比较: if(routerIdParameter() === 0) { console.log('They match'); } else { console.log('They do not match'); } 方法: public routerIdParameter(): numb
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;
}
}
显然,问题行是返回这个.route.snapshot.params['id']。params type是[key:string]:any,因此它无法知道类型,我假设类型检查会抱怨这个问题。
有一个简单的解决办法,就是在它前面加上+,但我更关心的是我在理解为什么允许它方面的差距
任何解释为什么会发生这种情况或如何使其出错都将不胜感激,因为我担心在我们的应用程序中可能会出现更多这种情况
在typescript 2.3.4中识别,但也在3.1.6中复制
此.route为ActivatedRoute类型。根据定义,从@angular/router导入的任何
可从任何类型分配,也可分配给任何类型。没有编译器设置使这更严格
在可能的情况下,您应该选择可从任何类型分配但不可分配到任何类型的any
与unknown
的更多信息(在typescript 3.0中介绍)
至于如何避免这种行为,我建议研究tslint规则,根据定义,任何
都可以从任何类型分配,也可以分配给任何类型。没有编译器设置使这更严格
在可能的情况下,您应该选择可从任何类型分配但不可分配到任何类型的any
与unknown
的更多信息(在typescript 3.0中介绍)
至于如何避免这种行为,我建议您研究一下tslint规则谢谢您提供的信息。没有不安全的任何人标记了问题线(还有1119个问题!),所以我将使用这种方法。谢谢你提供的信息。没有不安全的任何人(连同1119个其他人)标记了问题线,所以我将使用这种方法。