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.

Thierry Templier
quelle
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

Nick Hodges
quelle
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';
Karan Raiyani
quelle
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()));
Nadeem Qasmi
quelle
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';
S. Galarneau
quelle
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

Hari Prasad Sharma
quelle
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';
Amir.S
quelle
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.

Gehört
quelle
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';
Alex Valchuk
quelle
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.

Duschan
quelle
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

Naveen
quelle
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.

Devner
quelle
@ 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';
Ankit Bhatia
quelle
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.

Brahmmeswara Rao Palepu
quelle
3

Einfach ausführen npm install --save rxjs-compat, behebt den Fehler.

Es wird hier empfohlen

trustidkid
quelle
Bitte vergessen Sie nicht, 'rxjs / add / operator / map' zu importieren
trustidkid
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.

Shylendra Madda
quelle
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));
    }
}
Steffi Keran Rani J.
quelle
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.


quelle
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.

JavaJunior
quelle
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;
  })
})
Mohammad Quanit
quelle
1

npm installiere rxjs @ 6 rxjs-compatible @ 6 --save

Ajay Takur
quelle
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.

Nadeem Qasmi
quelle
-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';
Shailaja valiveti
quelle
1
Diese späte Antwort ist überflüssig.
Tom Faltesek