Die Eigenschaft 'map' ist für den Typ 'Observable <Response>' nicht vorhanden.


Antworten:


371

Sie müssen den mapOperator importieren :

import 'rxjs/add/operator/map'

Oder allgemeiner:

import 'rxjs/Rx';

Hinweis: Für Versionen von RxJS 6.x.xund höher müssen Sie pipeable Operatoren verwenden, wie im folgenden Code-Snippet gezeigt:

import { map } from 'rxjs/operators';
import { HttpClient } from '@angular/common/http';

// ...
export class MyComponent {
  constructor(private http: HttpClient) { }
  getItems() {
    this.http.get('https://example.com/api/items').pipe(map(data => {})).subscribe(result => {
      console.log(result);
    });
  }
}

Dies wird dadurch verursacht, dass das RxJS-Team die Unterstützung für die Verwendung entfernt. Weitere Informationen finden Sie in den wichtigsten Änderungen im Änderungsprotokoll von RxJS.

Aus dem Changelog:

Operatoren : Pipeable-Operatoren müssen jetzt wie folgt aus rxjs importiert werden : import { map, filter, switchMap } from 'rxjs/operators';. Keine tiefen Importe.


Ungültiger Modulname in Erweiterung, Modul '../../Observable' kann nicht gefunden werden. Die Eigenschaft 'map' ist für den Typ 'Observable <Response>' nicht vorhanden.
Malik Kashmiri

Wie importiere ich die ObservableKlasse? So: import {Observable} from 'rxjs/Observable';oder import {Observable} from 'rxjs/Rx';?
Thierry Templier

Ich importiere diese Klasse noch nicht
Malik Kashmiri

1
Ich benutze Angular 2 RC1 und rxjs 5.0.0-beta2. Ich habe Observable als Import {Observable} aus 'rxjs / beobachtbar' importiert. und importierter Kartenoperator wie import 'rxjs / add / operator / map'; Es hat funktioniert, als ich Beta 7 verwendet habe. Ich habe gerade ein Upgrade auf RC1 durchgeführt und es ist kaputt gegangen.
Darshan Puranik

4
Schreiben Sie diesen Befehl zuerst in das vs code-Terminal Ihres Projekts und starten Sie das Projekt neu. npm install rxjs-compat, als den mapOperator importieren .
Karan Raiyani

162

Wiederholen Sie diesen Vorgang, da meine Lösung hier nicht aufgeführt ist.

Ich verwende Angular 6 mit rxjs 6.0 und bin auf diesen Fehler gestoßen.

Folgendes habe ich getan, um das Problem zu beheben:

ich habe mich verändert

map((response: any) => response.json())

einfach sein:

.pipe(map((response: any) => response.json()));

Ich habe das Update hier gefunden:

https://github.com/angular/angular/issues/15548#issuecomment-387009186


1
Ich bin nicht sicher, warum das Migrationstool rxjs-5-to-6-migrate dies nicht aufgreift. Es ist interessant, dass das in meiner Umgebung noch ungelöste Do / Tap-Re-Mapping nicht behandelt wird, obwohl das Import-Tool es erkennt. 90% meiner "unerwarteten Zeitverschwendung" in der Angular-Entwicklung wird mit RxJS-Dokumenten- und Code-Grenzproblemen verbracht. Dies ist wirklich frustrierend.
Joe

1
Danke dir! Du bist ein Lebensretter!! Wer interessiert ist, der vollständige Verweis auf diese Änderung ist hier verfügbar: github.com/ReactiveX/rxjs/blob/master/…
malvadao

21
Dies funktionierte für mich, ich musste auch hinzufügenimport { map } from 'rxjs/operators';
Paul

Komisch, genau so haben wir es beim Angular 6-Upgrade behoben - was auch die neuesten RXJs brachte.
Max

2
@ Paul Danke. Bezüglich .catchkönnen wir catchErrorgerne verwenden .pipe(catchError(this.handleError))?
FindOutIslamNow

60

Schreiben Sie diesen Befehl einfach in das vs code-Terminal Ihres Projekts und starten Sie das Projekt neu.

npm install rxjs-compat

Sie müssen den mapOperator importieren , indem Sie Folgendes schreiben:

import 'rxjs/add/operator/map';

1
Wenn es nicht funktioniert, schließen Sie alle Dateien und starten Sie das vs Studio neu.
Ajay Takur

1
Das hat bei mir funktioniert, danke fürs Teilen.
thesamoanppprogrammer

30

Für den Angular 7v

Veränderung

import 'rxjs/add/operator/map';

Zu

import { map } from "rxjs/operators"; 

Und

 return this.http.get('http://localhost/ionicapis/public/api/products')
 .pipe(map(res => res.json()));

es hat mir bei Katana24 geholfen, als ich die richtige Syntax mit Pipe sah.
Punkologe

25

Ich hatte das gleiche Problem mit Angular 2.0.1, weil ich Observable aus importierte

import { Observable } from 'rxjs/Observable';

Ich behebe mein Problem beim Importieren von Observable von diesem Pfad

import { Observable } from 'rxjs';

Diese Vorgehensweise wird als nicht bündelgrößenfreundlich angesehen, da diese Anweisung alle Operatoren von Observable(einschließlich derjenigen, die Sie nicht verwenden) in das Bundle importiert . Stattdessen sollten Sie jeden Operator einzeln importieren. Ich empfehle die Verwendung von "vermietbaren Operatoren", die in RxJS v5.5 eingeführt wurden, um ein besseres Baumschütteln zu unterstützen.
Sarun Intaralawan

15

In rxjs 6 wurde die Verwendung des Kartenoperators geändert. Jetzt müssen Sie sie wie folgt verwenden.

import { map } from 'rxjs/operators';
myObservable
  .pipe(map(data => data * 2))
  .subscribe(...);

Als Referenz https://www.academind.com/learn/javascript/rxjs-6-what-changed/#operators-update-path


Beachten Sie diese Antwort, da jeder, der dies tut, den Operator RxJS v6verwenden muss .pipe()oder keiner der Operatoren direkt vom Observable aus arbeitet. Sie sehen einen Fehler wie,Property 'share' does not exist on type 'Observable<{}>'
atconway

8

Installieren Sie einfach rxjs-compatible, indem Sie terminal eingeben:

npm install --save rxjs-compat

dann importieren:

import 'rxjs/Rx';

7

Im neuesten Angular 7. *. * Können Sie dies einfach wie folgt versuchen:

import { Observable, of } from "rxjs";
import { map, catchError } from "rxjs/operators";

Und dann können Sie diese methodswie folgt verwenden:

   private getHtml(): Observable<any> {
    return this.http.get("../../assets/test-data/preview.html").pipe(
      map((res: any) => res.json()),
      catchError(<T>(error: any, result?: T) => {
        console.log(error);
        return of(result as T);
      })
    );
  }

Überprüfen Sie diese Demo für weitere Details.


5

In meinem Fall würde es nicht ausreichen, nur Karte und Versprechen aufzunehmen:

import 'rxjs/add/operator/map';
import 'rxjs/add/operator/toPromise';

Ich habe dieses Problem gelöst, indem ich mehrere rxjs-Komponenten als offizielle Dokumentation importiert habe empfohlen:

1) Importieren Sie Anweisungen in eine Datei app / rxjs-operator.ts:

// import 'rxjs/Rx'; // adds ALL RxJS statics & operators to Observable

// See node_module/rxjs/Rxjs.js
// Import just the rxjs statics and operators we need for THIS app.

// Statics
import 'rxjs/add/observable/throw';

// Operators
import 'rxjs/add/operator/catch';
import 'rxjs/add/operator/debounceTime';
import 'rxjs/add/operator/distinctUntilChanged';
import 'rxjs/add/operator/map';
import 'rxjs/add/operator/switchMap';
import 'rxjs/add/operator/toPromise';

2) Importieren Sie den rxjs-Operator selbst in Ihren Dienst:

// Add the RxJS Observable operators we need in this app.
import './rxjs-operators';

Ich halte es nicht für richtig, rxjs-Betreiber in alle Dienste einzubeziehen. Es sollte nur in app.module.ts enthalten sein, aber leider wirft ng test einen Fehler aus, wenn Operatoren nicht an bestimmten Stellen importiert werden
Mohan Ram

5
import { map } from "rxjs/operators";

getGetFunction(){
this.http.get('http://someapi')
.pipe(map(res => res));
}

getPostFunction(yourPara){
this.http.get('http://someapi',yourPara)
.pipe(map(res => res));
}

In der obigen Funktion können Sie sehen, dass ich res.json () nicht verwendet habe, da ich HttpClient verwende. Es wendet res.json () automatisch an und gibt Observable (HttpResponse <string>) zurück. Sie müssen diese Funktion nach Winkel 4 in HttpClient nicht mehr selbst aufrufen.


3

Ich hatte das gleiche Problem, ich verwendete Visual Studio 2015, das eine ältere Version von Typoskript hatte.

Nach dem Upgrade der Erweiterung wurde das Problem behoben.

Download-Link


3

Ich verwende Angular 5.2 und wenn ich import 'rxjs/Rx';es verwende, wird der folgende Flusenfehler ausgegeben: TSLint: Dieser Import ist auf der schwarzen Liste. Importieren Sie stattdessen ein Submodul (Import-Blacklist).

Siehe den Screenshot unten: Der Import von rxjs / Rx ist in Angular 5.2 auf der schwarzen Liste

LÖSUNG: Es wurde behoben, indem nur die Operatoren importiert wurden, die ich brauchte . Beispiel folgt:

import 'rxjs/add/operator/map';
import 'rxjs/add/operator/catch';

Die Lösung wäre also, nur die erforderlichen Operatoren zu importieren.


@ AndrewBenjamin Ich schlage vor, dass Sie das tun. Das erspart Ihnen viel Ärger auf der Straße.
Devner

3

Installieren Sie einfach rxjs-compatible , um das Problem zu lösen

npm i rxjs-compat --save-dev

Und importiere es wie unten

import 'rxjs/Rx';

3

Führen Sie zunächst die Installation wie folgt aus:

npm install --save rxjs-compat@6

Jetzt müssen Sie importieren rxjsin service.ts:

import 'rxjs/Rx'; 

Voila! Das Problem wurde behoben.



2

Ich habe alle möglichen Antworten ausprobiert, von denen keine funktioniert hat.

Ich habe das Problem gelöst, indem ich einfach meine IDE, dh Visual Studio Code, neu gestartet habe

Möge es jemandem helfen.


2

Auch ich hatte den gleichen Fehler. Eine Lösung, die für mich funktioniert hat, war das Hinzufügen der folgenden Zeilen in Ihrer service.ts- Datei anstelle von import 'rxjs/add/operator/map':

import { Observable } from 'rxjs';
import { map } from 'rxjs/operators';

Zum Beispiel war meine app.service.ts nach dem Debuggen wie folgt :

import { Injectable } from '@angular/core';
import { HttpClient } from '@angular/common/http';
import { Observable } from 'rxjs';
import { map } from 'rxjs/operators';

@Injectable()
export class AppService {
    constructor(private http: HttpClient) {}
    getData(): Observable<any> {
        return this.http.get('https://samples.openweathermap.org/data/2.5/history/city?q=Warren,OH&appid=b6907d289e10d714a6e88b30761fae22')
        .pipe(map(result => result));
    }
}

2

Wenn nach dem Importieren des Imports 'rxjs / add / operator / map' oder des Imports 'rxjs / Rx' ebenfalls der gleiche Fehler auftritt, starten Sie den Visual Studio-Code-Editor neu. Der Fehler wird behoben.


1

Überprüfen Sie für alle Linux-Benutzer, bei denen dieses Problem auftritt, ob der Ordner rxjs-compatible gesperrt ist. Ich hatte genau das gleiche Problem und ging ins Terminal, benutzte das sudo su, um dem gesamten rxjs-kompatiblen Ordner die Erlaubnis zu geben, und es wurde behoben. Vorausgesetzt, Sie haben importiert

import 'rxjs/add/operator/map';
import 'rxjs/add/operator/catch'; 

in der Datei project.ts, in der der ursprüngliche .map-Fehler aufgetreten ist.


1

Verwenden Sie die mapFunktion in pipeFunktion und es wird Ihr Problem lösen. Sie können die Dokumentation hier überprüfen .

this.items = this.afs.collection('blalal').snapshotChanges().pipe(map(changes => {
  return changes.map(a => {
    const data = a.payload.doc.data() as Items;
    data.id = a.payload.doc.id;
    return data;
  })
})


0
  import { Injectable } from '@angular/core';
  import { Http } from '@angular/http';
  import 'rxjs/add/operator/map';

  @Injectable({
  providedIn: 'root'
  })
  export class RestfulService {

  constructor(public http: Http) { }

 //access apis Get Request 
 getUsers() {
 return this.http.get('http://jsonplaceholder.typicode.com/users')
  .map(res => res.json());
  }

 }

Führen Sie den Befehl aus

 npm install rxjs-compat 

Ich importiere nur

 import 'rxjs/add/operator/map';

Starten Sie den vs-Code neu, Problem behoben.


-1

Die eckige neue Version unterstützt keine .map, die Sie über cmd npm install installieren müssen - speichern Sie rxjs-kompatibel über diese, die Sie mit alter Technik genießen können. Hinweis: Vergessen Sie nicht, diese Zeilen zu importieren.

import { Observable, Subject } from 'rxjs';
import 'rxjs/add/operator/map';
import 'rxjs/add/operator/catch';

1
Diese späte Antwort ist überflüssig.
Tom Faltesek
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.