为什么是 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
。
我有一个 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
。