Angular Ivy strictTemplates true类型'boolean | “ null”不可分配给“ boolean”类型

时间:2020-05-13 16:51:12

标签: angular angular-ivy

我已将我的应用更新为9版本。 一切都很好,但我有问题 将strictTemplates设置为true。 例如此代码

loaded$: Observable<boolean>
[loaded]="loaded$ | async"
@Input() loaded!: boolean;

我遇到了错误类型'boolean | “ null”不能分配给“ boolean”类型。

此错误修复

@Input() loaded!: boolean | null;

但是我看不到有人在解释我的意思吗?

2 个答案:

答案 0 :(得分:4)

原因是因为异步管道返回签名总是类似于<T>(input$: Observable<T>): T | null,因为它在等待异步调用响应时向模板返回null。

关于此的更多信息:https://angular.io/guide/template-typecheck#strict-null-checks

您可以执行已完成的操作并允许使用null,或者如果您知道它永远不会为null,请使用非null断言运算符:

[loaded]="(loaded$ | async)!"

或在此处禁用类型检查:

[loaded]="$any(loaded$ | async)"

或者对于这种特殊情况,您可能可以执行以下操作:

[loaded]="(loaded$ | async) || false"

答案 1 :(得分:1)

这是Typescript更新错误而不是Angular更新,我相信在Typescript 2X版本之后,setupinclude_package_data=True不再是其他类型的子类型,并且将一如既往地提供更多的子类型编译时。静态类型检查。

如果您的实际类型是布尔值并且收到null的信息,但对您的影响不大,但是如果您的实际类型是Object,则必须相信Typescript会强制您进行所有真实性检查,因此您不会陷入运行时错误。

事实证明,Javscript中的所有内容都是对象,但是我们通常不使用布尔值作为对象,但是如果使用:

undefined