如果我有这样的模板( readOnly
是布尔值,而 arrayOfStuff
是一个数组(:
<span *ngIf="!readOnly && arrayOfStuff && arrayOfStuff.length">Hey</span>
ng build --prod
或ng 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 --prod
或ng serve --prod
生成生产构建时才发生。这不是开发的问题。
要清楚 - 我可以使问题消失,但是我想了解为什么可以直接在一种情况下直接检查arrayOfStuff.length
,而不是另一种情况。
Angular V4, @Angular/CLI V1.0.1。
不使用comperator时,JavaScript尝试在变量上使用类型续调。由于它在此处尝试,并且无法将其直接更改为布尔值,它会给您带来错误。但是,当您做到
时array.length > 0
它不会尝试,因为所有变量都是布尔值。概述的问题是,原始数字不能更改为布尔值。您可以使用
!!array.length
获得所需的结果