在NGIF中测试布尔值和数字时键入错误



如果我有这样的模板( readOnly是布尔值,而 arrayOfStuff是一个数组(:

<span *ngIf="!readOnly && arrayOfStuff && arrayOfStuff.length">Hey</span>

ng build --prodng serve --prod都会给出错误:

ERROR in /Development/project/src/$$_gendir/app/components/thing/thing.component.ngfactory.ts (767,11): Type 'number' is not assignable to type 'boolean'.

...但是,如果我删除布尔值检查效果很好:

<span *ngIf="arrayOfStuff && arrayOfStuff.length">Hey</span>

...或如果我进行长度检查特别检查数字比较,则可以正常工作:

<span *ngIf="!readOnly && arrayOfStuff && (arrayOfStuff.length >0)">Hey</span>

当我检查对象是否存在时,为什么可以对arrayOfStuff.length进行虚假检查,但是当我检查布尔值的值时,这样做是不对的?

再次,这种情况仅在我实际上使用ng build --prodng serve --prod生成生产构建时才发生。这不是开发的问题。

要清楚 - 我可以使问题消失,但是我想了解为什么可以直接在一种情况下直接检查arrayOfStuff.length,而不是另一种情况。

Angular V4, @Angular/CLI V1.0.1。

不使用comperator时,JavaScript尝试在变量上使用类型续调。由于它在此处尝试,并且无法将其直接更改为布尔值,它会给您带来错误。但是,当您做到

array.length > 0

它不会尝试,因为所有变量都是布尔值。概述的问题是,原始数字不能更改为布尔值。您可以使用

!!array.length 

获得所需的结果

最新更新