Angular编译器未报告模板中缺少属性

时间:2019-02-26 22:53:31

标签: angular

如果用法包装在*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中)。因此应该有可能。

1 个答案:

答案 0 :(得分:0)

Angular实际上提供了此功能,但是由于某种原因默认情况下未将其打开。

tsconfig.json中添加以下代码可进行完整的模板类型检查:

"angularCompilerOptions": {
  "fullTemplateTypeCheck": true
}

但是请注意,这实际上并不执行“完整”类型检查。它仍然跳过了复杂的结构构造。但是在Ivy中,这显然是编译器能够执行适当的“完整”模板类型检查的功能。