我想隐藏 BehaviorSubject 的“next”接口,同时保留其其他属性,尤其是能够强制获取最后发出的值。我的想法是,所有状态操作都可以在服务中的私有 BehaviorSubject 上进行,而我所暴露的只是所谓的“ReadonlySubject”,它没有“next”方法。目前我唯一的想法是这样的:
export class ReadonlyBehaviorSubject<T> extends BehaviorSubject<T> {
override next(_value: T) {
console.error('cannot set value on a readonly BehaviorSubject');
}
}
export function toReadonlyBehaviorSubject<T>(bs: BehaviorSubject<T>): ReadonlyBehaviorSubject<T> {
return new ReadonlyBehaviorSubject(bs.value);
}
如你所见,我们仍然有“next”方法——它什么也不做,只是通知用户无法在 ReadonlyBehaviorSubject 上设置值。有没有更简洁的方法?最好完全不暴露“next”方法?