如果用法包装在*ngIf
指令中,则在模板中使用不存在的属性时,Angular AOT编译器不会失败。
例如在此示例中,custom
没有定义属性property
:
<div *ngIf="condition">
{{ custom.property }}
</div>
为什么Angular编译器在此代码上不会失败? 有没有一种手段可以做到这一点?
为澄清起见,此代码按预期失败:
<div>
{{ custom.property }}
</div>
我目前正在考虑创建一个自定义的lint脚本,该脚本将从代码中删除所有*ngIf
,并进行AOT构建以检查所有属性是否确实存在。那是一个有效的主意吗?如果是这样,为什么我必须首先这样做?
我正在使用Angular 5,但我认为它在较新版本中也不起作用。
我发现Angular Language服务能够报告这些错误(在VS Code或IntelliJ IDEA中)。因此应该有可能。
答案 0 :(得分:0)
Angular实际上提供了此功能,但是由于某种原因默认情况下未将其打开。
在tsconfig.json
中添加以下代码可进行完整的模板类型检查:
"angularCompilerOptions": {
"fullTemplateTypeCheck": true
}
但是请注意,这实际上并不执行“完整”类型检查。它仍然跳过了复杂的结构构造。但是在Ivy中,这显然是编译器能够执行适当的“完整”模板类型检查的功能。