angular - Hur kan jag utöka RxJS?
Jag letar efter ett sätt att köra en återuppringning när någon anropar subscribe på en instans av en given klass som implementerar Observable.
I avsaknad av en hook i RxJS-biblioteket, skulle jag i nästan vilket annat objektorienterat språk som helst:
- ärva klassen jag vill anpassa (
ReplaySubjecti detta fall); - skriv över
subscribe-metoden; och - utför min återuppringning och delegera sedan anropet till superklassens
subscribe-metod.
Något sådant här:
export class CallbackReplaySubject<T> extends ReplaySubject<T> {
subscribe(observer: Partial<Observer<T>>): Unsubscribable {
this.triggerCallback();
return super.subscribe(observer);
}
private triggerCallback(): void {
// do something when someone subscribes
}
}
I RxJS v7 med TypeScript får jag detta felmeddelande:
Property 'subscribe' in type 'CallbackReplaySubject<T>' is not assignable to the same property in base type 'ReplaySubject<T>'.
Type '(observer: Partial<Observer<T>>) => Unsubscribable' is not assignable to type '{ (observerOrNext?: Partial<Observer<T>> | ((value: T) => void) | undefined): Subscription; (next?: ((value: T) => void) | null | undefined, error?: ((error: any) => void) | ... 1 more ... | undefined, complete?: (() => void) | ... 1 more ... | undefined): Subscription; }'.
Type 'Unsubscribable' is missing the following properties from type 'Subscription': closed, _parentage, _finalizers, add, and 4 more.
Ju djupare jag gräver i detta, desto mer kommer jag i kontakt med "understrukna" RxJS-metoder som är markerade som interna, som skriker "HÅLL DIG BORTA!" åt mig och förhindrar all form av anpassning.
Så istället för arv försökte jag delegationsmönstret. Men det fungerar inte heller eftersom Observable inte är ett gränssnitt utan en klass. Så jag blir återigen intrasslad med dessa "understrukna" interna metoder och medlemmar.
Kan någon visa mig en väg ut ur det här?
Upp till och med RxJS v6 kunde jag lösa detta med arv, genom att ärva ReplaySubject's interna _subscribe-metod.