【发布时间】:2022-08-01 22:07:28
【问题描述】:
我正在尝试在服务中创建一个 ICar 类型(由我定义)的新 BehaviorSubject,并默认放置 null 或 undefined。如果我将类型更新为ICar | undefined,我将在函数getCar() 处收到错误,因为它在抱怨返回类型。是否有任何解决方法来解决此问题?
我的代码:
export interface ICar{
id:number,
name: string,
}
//service:
@Injectable({
providedIn: \'root\'
})
export class CarService {
private car$ = new BehaviorSubject<ICar>(null); //error
constructor() {
}
setCar(car: ICar) {
this.car$.next(car);
}
getCar(): Observable<ICar> {
return this.car$;
}
}
-
如果您在 tsconfig 中有严格的输入(我认为这是默认打开的),您必须将类型声明为
ICar | null,类似于new BehaviorSubjec<ICar | null>(null) -
是的,但这迫使我将 getCar 的返回类型调整为 BehaviorSubject<ICar | null> 我不想要这个。
-
你可以创建一个默认的 ICar
-
如果您不想初始化该值,可以考虑使用
Subject。BehaviorSubject或ReplaySubject需要使用值进行初始化。 -
是什么行为你要的那个?创建
BehaviorSubject建议它应该立即地发出一个值,您传递的默认值(当前为null,这实际上意味着您的主题接收到ICar或null)。如果你想总是发出ICar,默认值需要实现该接口,或者您不应该拥有该默认值(因此不是需要一个的主题)。
标签: angular typescript rxjs