La 'mappa' della proprietà non esiste sul tipo 'Osservabile <Risposta>'


Risposte:


371

Devi importare l' mapoperatore:

import 'rxjs/add/operator/map'

O più in generale:

import 'rxjs/Rx';

Avviso: per le versioni di RxJS 6.x.xe successive, dovrai utilizzare operatori pipeable come mostrato nello snippet di codice seguente:

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);
    });
  }
}

Ciò è causato dal team di RxJS che rimuove il supporto per l'utilizzo. Per ulteriori informazioni, consultare le modifiche sostanziali nel log delle modifiche di RxJS.

Dal log delle modifiche:

operatori : gli operatori Pipeable devono ora essere importati da rxjs in questo modo: import { map, filter, switchMap } from 'rxjs/operators';. Nessuna importazione profonda.


Nome del modulo non valido in aumento, impossibile trovare il modulo '../../Observable'. La 'mappa' della proprietà non esiste sul tipo 'Osservabile <Risposta>'.
Malik Kashmiri,

Come si importa la Observableclasse? In questo modo: import {Observable} from 'rxjs/Observable';oppure import {Observable} from 'rxjs/Rx';?
Thierry Templier,

non ho importato questa classe finora
Malik Kashmiri,

1
Sto usando Angular 2 RC1 e rxjs 5.0.0-beta2. Ho importato Observable come import {Observable} da 'rxjs / observable'; e importatore di mappe importato come import 'rxjs / add / operator / map'; Funzionava quando stavo usando Beta 7. Ho appena aggiornato a RC1 e si è rotto.
Darshan Puranik,

4
Per prima cosa scrivi questo comando nel terminale vs code del tuo progetto e riavvia il progetto. npm install rxjs-compat, che importare l' mapoperatore.
Karan Raiyani,

162

Rivedere questo perché la mia soluzione non è elencata qui.

Sto eseguendo Angular 6 con rxjs 6.0 e ho riscontrato questo errore.

Ecco cosa ho fatto per risolverlo:

Ho cambiato

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

essere semplicemente:

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

Ho trovato la correzione qui:

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


1
Non sono sicuro del perché lo strumento di migrazione rxjs-5-to-6-migrate non lo rilevi? È interessante che non affronti il ​​re-mapping do / tap che nel mio ambiente è ancora irrisolto anche se lo strumento di importazione lo riconosce. Il 90% del mio "tempo sprecato imprevisto" nello sviluppo angolare è dedicato a problemi relativi ai confini del documento e del codice RxJS, questo è davvero frustrante.
Joe,

1
Grazie! Sei un vero toccasana !! Chiunque sia interessato, il riferimento completo a questa modifica è disponibile qui: github.com/ReactiveX/rxjs/blob/master/…
malvadao

22
Questo ha funzionato per me, dovevo anche aggiungereimport { map } from 'rxjs/operators';
paul

Divertente, questo è esattamente il modo in cui l'abbiamo risolto con l'aggiornamento angolare 6, che ha portato anche gli ultimi rxjs.
Max

2
@paul Grazie. Per quanto riguarda .catch, possiamo usare catchErrorcome .pipe(catchError(this.handleError))?
FindOutIslamNow,

60

basta scrivere questo comando nel terminale vs code del progetto e riavviare il progetto.

npm install rxjs-compat

Devi importare l' mapoperatore scrivendo questo:

import 'rxjs/add/operator/map';

1
se non funziona chiudere tutti i file e riavviare vs studio.
Ajay Takur,

1
Questo ha funzionato per me, grazie per averlo condiviso.
thesamoanppprogrammer

30

Per Angular 7v

Modificare

import 'rxjs/add/operator/map';

Per

import { map } from "rxjs/operators"; 

E

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

mi ha aiutato @ Katana24 quando ho visto la sintassi corretta con pipe.
punkologist

25

Ho avuto lo stesso problema con Angular 2.0.1 perché stavo importando Observable da

import { Observable } from 'rxjs/Observable';

Risolvo invece il mio problema con l'importazione di Observable da questo percorso

import { Observable } from 'rxjs';

Questa pratica è considerata non adatta alle dimensioni del pacchetto poiché tale istruzione importa tutti gli operatori di Observable(inclusi quelli che non si utilizzano) nel pacchetto. Invece, è necessario importare ciascun operatore singolarmente. Raccomando di usare "operatori abilitati", introdotto in RxJS v5.5 per supportare un migliore agitazione degli alberi.
Sarun Intaralawan,

15

In rxjs 6 l'utilizzo dell'operatore della mappa è stato modificato ora è necessario utilizzarlo in questo modo.

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

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


Prendi nota di questa risposta poiché chiunque lo RxJS v6farà dovrà utilizzare .pipe()o nessuno degli operatori lavorerà direttamente dall'Osservabile. Vedrai un errore del tipo:Property 'share' does not exist on type 'Observable<{}>'
atconway,

8

basta installare rxjs-compat digitando nel terminale:

npm install --save rxjs-compat

quindi importare:

import 'rxjs/Rx';

8

Nell'ultimo Angular 7. *. * , Puoi provare questo semplicemente come:

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

E quindi puoi usarli methodscome segue:

   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);
      })
    );
  }

Controlla questa demo per maggiori dettagli.


5

Nel mio caso non sarebbe sufficiente includere solo la mappa e la promessa:

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

Ho risolto questo problema importando diversi componenti rxjs come raccomandato dalla documentazione ufficiale :

1) Importare le istruzioni in un file app / rxjs-operatori.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) Importa rxjs-operator stesso nel tuo servizio:

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

Sento che non è giusto includere operatori rxjs in tutti i servizi. Dovrebbe essere incluso solo su app.module.ts ma sfortunatamente il test genera un errore se gli operatori non vengono importati in luoghi specifici
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));
}

Nella funzione sopra puoi vedere che non ho usato res.json () poiché sto usando HttpClient. Applica automaticamente res.json () e restituisce Observable (HttpResponse <stringa>). Non è più necessario chiamare questa funzione da soli dopo l'angolo 4 in HttpClient.


3

Ho avuto lo stesso problema, stavo usando Visual Studio 2015 che aveva una versione precedente di dattiloscritto.

Dopo aver aggiornato l'estensione, il problema è stato risolto.

Link per scaricare


3

Sto usando Angular 5.2 e quando lo uso import 'rxjs/Rx';mi lancia il seguente errore di lanugine: TSLint: questa importazione è nella lista nera, importa invece un sottomodulo (import-lista nera)

Vedi lo screenshot qui sotto: L'importazione di rxjs / Rx è inclusa nella blacklist in Angular 5.2

SOLUZIONE: risolto importando solo gli operatori di cui avevo bisogno . L'esempio segue:

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

Quindi la soluzione sarebbe importare specificamente solo gli operatori necessari.


@AndrewBenjamin Consiglio vivamente di farlo. Ciò ti farà risparmiare un sacco di problemi lungo la corsia.
Devner,

3

Installa semplicemente rxjs-compat per risolvere il problema

npm i rxjs-compat --save-dev

E importalo come di seguito

import 'rxjs/Rx';

3

Prima di tutto eseguire l'installazione come di seguito:

npm install --save rxjs-compat@6

Ora devi importare rxjsin service.ts:

import 'rxjs/Rx'; 

Ecco! Il problema e 'stato risolto.



2

Ho provato tutte le possibili risposte postate sopra nessuna di queste ha funzionato,

L'ho risolto semplicemente riavviando il mio IDE, ad esempio Visual Studio Code

Che possa aiutare qualcuno.


2

Anch'io ho affrontato lo stesso errore. Una soluzione che ha funzionato per me è stato quello di aggiungere le seguenti righe nei vostri service.ts il file invece di import 'rxjs/add/operator/map':

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

Ad esempio, il mio app.service.ts dopo il debug era come,

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

Se dopo aver importato import 'rxjs / add / operator / map' o importando 'rxjs / Rx' stai ottenendo lo stesso errore, riavvia l'editor di codice di Visual Studio, l'errore verrà risolto.


1

per tutti quegli utenti linux che hanno questo problema, controlla se la cartella rxjs-compat è bloccata. Ho avuto lo stesso identico problema e sono entrato nel terminale, ho usato sudo su per dare il permesso all'intera cartella rxjs-compat ed è stato risolto. Questo presuppone che tu abbia importato

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

nel file project.ts in cui si è verificato l'errore .map originale.


1

Utilizzare la mapfunzione in pipefunzione e risolverà il problema. Puoi consultare la documentazione qui .

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());
  }

 }

eseguire il comando

 npm install rxjs-compat 

Ho appena importato

 import 'rxjs/add/operator/map';

riavvia il codice vs, problema risolto.


-1

La nuova versione angolare non supporta .map, devi installarla tramite cmd npm install - salva rxjs-compat tramite questa che puoi goderti con la vecchia tecnica. nota: non dimenticare di importare queste righe.

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

1
Questa risposta tardiva è ridondante.
Tom Faltesek,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.