如果我有这样的模板(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
而在另一个案例中没有。{/ p>
Angular v4,@ angular / cli v1.0.1。
答案 0 :(得分:1)
当你不使用comperators时,javascript尝试对变量使用type-coercion。因为它在这里尝试它并且不能直接将它改为布尔值它会给你错误。但是,当你做到它
array.length > 0
它没有尝试,因为所有变量都是布尔值。显然问题是原始数字不能改为布尔值。你可以使用
!!array.length
获得您想要的结果