Website-Suche

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)

Verwandte Artikel