我已将我的应用更新为9版本。 一切都很好,但我有问题 将strictTemplates设置为true。 例如此代码
loaded$: Observable<boolean>
[loaded]="loaded$ | async"
@Input() loaded!: boolean;
我遇到了错误类型'boolean | “ null”不能分配给“ boolean”类型。
此错误修复
@Input() loaded!: boolean | null;
但是我看不到有人在解释我的意思吗?
答案 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版本之后,setup
和include_package_data=True
不再是其他类型的子类型,并且将一如既往地提供更多的子类型编译时。静态类型检查。
如果您的实际类型是布尔值并且收到null
的信息,但对您的影响不大,但是如果您的实际类型是Object,则必须相信Typescript会强制您进行所有真实性检查,因此您不会陷入运行时错误。
事实证明,Javscript中的所有内容都是对象,但是我们通常不使用布尔值作为对象,但是如果使用:
undefined