在ngIf中测试布尔值和数字时输入错误

时间:2017-04-25 18:09:36

标签: angular typescript angular-cli angular2-aot

如果我有这样的模板(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而在另一个案例中没有。{/ p>

Angular v4,@ angular / cli v1.0.1。

1 个答案:

答案 0 :(得分:1)

当你不使用comperators时,javascript尝试对变量使用type-coercion。因为它在这里尝试它并且不能直接将它改为布尔值它会给你错误。但是,当你做到它

array.length > 0

它没有尝试,因为所有变量都是布尔值。显然问题是原始数字不能改为布尔值。你可以使用

!!array.length 

获得您想要的结果