angular - Argument des Typs 'MonoTypeOperatorFunction' ist nicht dem Parameter des Typs 'UnaryFunction, Observable>' zuweisbar
Ich versuche, von rxjs 5 auf 6 zu migrieren, habe aber Schwierigkeiten. Wenn ich dies versuche
this._connectivity.isOnline().pipe(first()).subscribe((state) => {
this.syncCheck(user.uid);
});
Ich bekomme diesen Fehler
Argument of type 'MonoTypeOperatorFunction<any>' is not assignable to parameter of type 'UnaryFunction<Observable<any>, Observable<any>>'.
Types of parameters 'source' and 'source' are incompatible.
Type 'import("/home/User/Desktop/projectname/node_modules/rxjs/Observable").Observable<any>' is not assignable to type 'import("/home/User/Desktop/projectname/node_modules/rxjs/internal/Observable").Observable<a...'.
Property 'map' is missing in type 'Observable<any>'.
Antwort #1
Ich habe denselben Fehler in meinem Code gefunden:
let source = of([1, 2, 3, 45, 56, 7, 7])
.pipe(
filter((x: number) => x % 2 == 0)
);
TS2345: Argument vom Typ 'MonoTypeOperatorFunction' kann nicht dem Parameter vom Typ 'OperatorFunction' zugewiesen werden.
Um dies zu beheben, entfernen Sie den Typ aus der Filterfunktion
filter(x => x % 2 == 0)
Jetzt hast du einen Fehler
Die linke Seite einer arithmetischen Operation muss vom Typ 'any', 'number' sein, also stellen Sie sicher, dass dieser lästige Filter den richtigen Datentyp erhält
filter(x => Number(x) % 2 == 0) // parse element to number
Aber jetzt funktioniert der Code nicht mehr. Schließlich, um dies zu beheben, ändere 'of' zu 'from' am Anfang.
let source = from([1, 2, 3, 45, 56, 7, 7])
.pipe(
filter((x: number) => Number(x) % 2 === 0)
)
oder
let source = of(1, 2, 3, 45, 56, 7, 7)
.pipe(
filter((x: number) => Number(x) % 2 === 0)
)
Also, die Ursache des Fehlers war meine anfängliche Datenstruktur.
Ich denke, dass mein Beispiel Ihnen helfen kann, mit ähnlichen Problemen umzugehen.
Antwort #2
Es scheint, dass Sie einen falschen Import für den Rückgabewert von isOnline() haben. Stellen Sie sicher, dass Sie immer von rxjs importieren und niemals von rxjs/internal oder sogar von rxjs/internal/Observable. (Operatoren wie first() müssen von rxjs/operators importiert werden)
