typescript - Brytande förändring i RxJs ErrorObservable (Migration 5 -> 6)
Vi står inför ett problem när vi uppdaterar vår applikation till RxJs 6 (med rxjs-compat). Ett refererat bibliotek, som fortfarande använder RxJs 5, använder ErrorObservable som returtyp för en metod.
public handleError(error: Error): ErrorObservable {
...
return Observable.throw('some error message');
}
Från och med nu är ErrorObservable en icke-generisk typ i RxJs: https://github.com/ReactiveX/rxjs/blob/5.5.11/src/observable/ErrorObservable.ts
export class ErrorObservable extends Observable<any> {
...
}
Detta har förändrats med RxJs 6
(se https://github.com/ReactiveX/rxjs/blob/master/compat/observable/ErrorObservable.ts)
export class ErrorObservable<T> extends Observable<T> {
static create<T>(error: any, scheduler?: SchedulerLike) {
return throwError(error, scheduler);
}
}
Vilket förstås leder till ett kompileringfel:
ERROR in ... : error TS2314: Generic type 'ErrorObservable<T>' requires 1 type argument(s).
Är detta ett fall som inte täcks av rxjs-compat eller är det ett problem med typdefinitionen i rxjs-compat?
Svar #1
Ta en titt i avsnittet om brytande ändringar
Alla observerbara klasser (https://github.com/ReactiveX/rxjs/tree/5.5.8/src/observable) har tagits bort från v6, till förmån för befintliga eller nya operatorer som utför samma operationer som klassmetoderna. Till exempel kan
ArrayObservable.create(myArray)ersättas medfrom(myArray), eller den nya operatornfromArray()
Det verkar som att du bör använda throwError-funktionen istället för ErrorObservable-klassen.