初始化值为1的BehaviorSubject为何无法赋值给number类型?
问题:BehaviorSubject已设初始值,但async管道返回
number | null导致类型错误 场景代码
PlayerTurnService 服务实现
import { Injectable } from '@angular/core'; import { BehaviorSubject } from 'rxjs'; @Injectable({ providedIn: 'root', }) export class PlayerTurnService { private playerTurnState$ = new BehaviorSubject<number>(1); nextPlayerTurn() { this.playerTurnState$.next(this.playerTurnState$.value === 1 ? 2 : 1); } getCurrentPlayerTurn() { return this.playerTurnState$.asObservable(); } }
父组件模板绑定
<app-player-label [currentPlayerTurn]="playerTurn$ | async"></app-player-label>
子组件 PlayerTurnLabelComponent
@Component({ selector: 'app-player-label', template: ` <p>Player {{playerTurn}} turn </p> `, standalone: true, styles: [], changeDetection: ChangeDetectionStrategy.OnPush, }) export class PlayerTurnLabelComponent { @Input() playerTurn!: number; }
报错信息
Type 'number | null' is not assignable to type 'number'.
临时修复方式
将子组件的输入属性类型改为number | null:
@Input() playerTurn!: number | null;
疑问
BehaviorSubject已经初始化了值1,且后续只会在1和2之间切换,永远不会出现null值,同时也给输入属性加了非空断言!,为什么async管道仍然会推断出number | null的类型?是不是对BehaviorSubject的初始化机制有误解?
内容的提问来源于stack exchange,提问作者onTheInternet
相关产品推荐
相关产品推荐

