为什么是 BehaviorSubject<number | undefined> |异步评估为空?

Why is BehaviorSubject<number | undefined> | async evaluating to null?

我有一个 BehaviorSubject 被输入为发出 number | undefined:


export class MyComponent {
  indentation$ = new BehaviorSubject<number | undefined>(undefined)
  ...
}

我需要将排放量从这个传递到接受任一 number | undefined 的 属性。但是,当将其连接到模板时,它会抱怨无法接受 null:

<my-other-component indent="indentation$ | async"> 
<!-- 
         Type 'number | null | undefined' is not 
         assignable to type 'number | undefined' 
-->
</my-other-component>

错误随即消失!

<my-other-component indent="(indentation$ | async)!"> 
</my-other-component>

空值从何而来?

为什么模板会认为 indentation$ | async 可能永远为空?它没有在构造函数中以这种方式定义,所以我对所有这些工作原理的理解差距在哪里?

来自 the async pipe 本身。转换方法的 return 类型是 T | null。通过推断,async 管道输入的 return 类型确实是 number | undefined(来自您的类型声明)来自 async 管道的 | null