【发布时间】:2019-06-19 06:12:20
【问题描述】:
在我的 Angular 项目中启用 no-unsafe-any tslint 规则后,我开始看到很多结果。深入研究它们是将注入构造函数的参数的属性标记为任何类型,即使它们是强类型类。我不明白为什么要标记这些,我显然在这里遗漏了一些简单的东西。
错误信息:
不安全地使用“any”类型的表达式。
示例组件:
@Component({..)}
export class SampleComponent {
private localString: string;
constructor(private injectedService: SampleService) {
this.localString= this.injectedService.stringProperty;
}
}
以及示例服务:
@Injectable({providedIn: 'root'})
export class SampleService {
public stringProperty: string;
}
注意:如果背景有任何用途,请从以下问题开始:Typescript not enforcing or checking return type
【问题讨论】:
-
您在哪一行得到错误。使用您的代码,我实际上在
SampleService上遇到错误,但这是由于Injectable出于某种原因返回any..仅供参考@Input也返回any -
行和列是构造函数中 this.injectedService.stringProperty 的开始。抱歉,示例代码可能无法编译,因为我需要将其匿名化,但看起来会发生在访问注入依赖项属性的任何地方。
-
也许这篇文章会有所帮助:github.com/palantir/tslint/issues/2728 我认为问题出在角度定义中的
any上,票证中有关于如何扩充定义的建议 -
在不改变 Angular 装饰器的默认定义(如可注入、输入等)的情况下,这条规则似乎是不可靠的。但至少了解它发生的原因是件好事。如果您想将其放入答案中,我可以标记为已接受。
-
我在我的一个项目中激活了规则,并为角度类型添加了一些增强,它工作正常。我会尽快添加我的发现
标签: angular typescript tslint