Properti 'peta' tidak ada pada tipe 'Observable <Response>'

Jawaban:

371

Anda perlu mengimpor mapoperator:

import 'rxjs/add/operator/map'

Atau lebih umum:

import 'rxjs/Rx';

Perhatian: Untuk versi RxJS 6.x.xdan di atasnya, Anda harus menggunakan operator yang dapat pipa seperti yang ditunjukkan dalam cuplikan kode di bawah ini:

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

Ini disebabkan oleh tim RxJS menghapus dukungan untuk menggunakan Lihat perubahan pada changelog RxJS untuk info lebih lanjut.

Dari changelog:

operator : operator Pipeable sekarang harus diimpor dari rxjs suka begitu: import { map, filter, switchMap } from 'rxjs/operators';. Tidak ada impor dalam.

Thierry Templier
sumber
Nama modul dalam augmentasi tidak valid, modul '../../Observable' tidak dapat ditemukan. Properti 'peta' tidak ada pada tipe 'Observable <Response>'.
Malik Kashmiri
Bagaimana Anda mengimpor Observablekelas? Seperti ini: import {Observable} from 'rxjs/Observable';atau import {Observable} from 'rxjs/Rx';?
Thierry Templier
saya tidak mengimpor kelas ini sejauh ini
Malik Kashmiri
1
Saya menggunakan Angular 2 RC1 dan rxjs 5.0.0-beta2. Saya telah mengimpor Observable as import {Observable} dari 'rxjs / observable'; dan operator peta yang diimpor seperti impor 'rxjs / add / operator / map'; Itu bekerja ketika saya menggunakan Beta 7. Saya baru saja meningkatkan ke RC1 dan itu rusak.
Darshan Puranik
4
Pertama tulis perintah ini di terminal kode vs proyek Anda dan restart proyek. npm install rxjs-compat, daripada mengimpor mapoperator.
Karan Raiyani
162

Mengunjungi kembali ini karena solusi saya tidak tercantum di sini.

Saya menjalankan Angular 6 dengan rxjs 6.0 dan mengalami kesalahan ini.

Inilah yang saya lakukan untuk memperbaikinya:

aku berubah

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

secara sederhana:

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

Saya menemukan perbaikannya di sini:

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

Nick Hodges
sumber
1
Saya tidak yakin mengapa alat migrasi rxjs-5-ke-6-migrasi tidak mengambil ini? Sangat menarik bahwa itu tidak mengatasi pemetaan ulang do / tap yang di lingkungan saya masih belum terselesaikan meskipun alat impor mengenalinya. 90% dari 'waktu terbuang saya yang tidak terduga' dalam pengembangan Angular dihabiskan dengan dokumen RxJS dan masalah batas kode, ini benar-benar membuat frustrasi.
Joe
1
Terima kasih! Anda adalah penyelamat !! Siapa pun yang tertarik, referensi lengkap untuk perubahan ini tersedia di sini: github.com/ReactiveX/rxjs/blob/master/…
malvadao
21
Ini bekerja untuk saya, saya juga perlu menambahkanimport { map } from 'rxjs/operators';
paul
Lucu, ini persis bagaimana kami memperbaikinya pada upgrade sudut 6 - yang membawa rxjs terbaru juga.
Maks
2
@ paul, terima kasih. Mengenai .catch, kita bisa menggunakan catchErrorlike .pipe(catchError(this.handleError))?
FindOutIslamNow
60

cukup tulis perintah ini di terminal kode vs proyek Anda dan restart proyek.

npm install rxjs-compat

Anda perlu mengimpor mapoperator dengan menulis ini:

import 'rxjs/add/operator/map';
Karan Raiyani
sumber
1
jika tidak berhasil tutup semua file dan mulai ulang studio vs.
Ajay Takur
1
Ini berhasil untuk saya, terima kasih sudah berbagi.
thesamoanppgrammermer
30

Untuk 7v Sudut

Perubahan

import 'rxjs/add/operator/map';

Untuk

import { map } from "rxjs/operators"; 

Dan

 return this.http.get('http://localhost/ionicapis/public/api/products')
 .pipe(map(res => res.json()));
Nadeem Qasmi
sumber
itu membantu saya @ Katana24 ketika saya melihat sintaks yang benar dengan pipa.
punkologist
25

Saya memiliki masalah yang sama dengan Angular 2.0.1 karena saya mengimpor dari diamati

import { Observable } from 'rxjs/Observable';

Saya menyelesaikan masalah saya dalam mengimpor Observable dari jalur ini sebagai gantinya

import { Observable } from 'rxjs';
S.Galarneau
sumber
Praktik ini dianggap tidak ramah-bundel karena pernyataan itu mengimpor semua operator Observable(termasuk yang tidak Anda gunakan) ke dalam bundel. Sebagai gantinya, Anda harus mengimpor masing-masing operator secara individual. Saya merekomendasikan menggunakan "operator yang dapat diijinkan", yang diperkenalkan pada RxJS v5.5 untuk mendukung pengocokan pohon yang lebih baik.
Sarun Intaralawan
15

Dalam rxjs 6 penggunaan peta operator telah diubah sekarang Anda harus menggunakannya seperti ini.

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

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

Hari Prasad Sharma
sumber
Perhatikan jawaban ini karena siapa pun yang melakukan RxJS v6akan perlu menggunakan .pipe()atau tidak ada operator yang akan langsung bekerja dari Observable. Anda akan melihat kesalahan seperti,Property 'share' does not exist on type 'Observable<{}>'
atconway
8

cukup instal rxjs-compat dengan mengetikkan terminal:

npm install --save rxjs-compat

lalu impor:

import 'rxjs/Rx';
Amir
sumber
8

Di Angular 7 terbaru . *. * , Anda dapat mencoba ini hanya sebagai:

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

Dan kemudian Anda dapat menggunakan ini methodssebagai berikut:

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

Lihat demo ini untuk lebih jelasnya.

Dengarkan
sumber
5

Dalam kasus saya, tidak cukup hanya menyertakan peta dan janji:

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

Saya memecahkan masalah ini dengan mengimpor beberapa komponen rxjs sebagaimana direkomendasikan oleh dokumentasi resmi :

1) Impor pernyataan dalam satu file 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) Impor rxjs-operator itu sendiri dalam layanan Anda:

// Add the RxJS Observable operators we need in this app.
import './rxjs-operators';
Alex Valchuk
sumber
Saya merasa tidak benar untuk memasukkan rxjs-operator di setiap layanan. Ini harus dimasukkan hanya di app.module.ts tetapi sayangnya tes melempar kesalahan jika operator tidak diimpor di tempat
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));
}

Dalam fungsi di atas Anda dapat melihat saya tidak menggunakan res.json () karena saya menggunakan HttpClient. Ini berlaku res.json () secara otomatis dan mengembalikan Observable (HttpResponse <string>). Anda tidak perlu lagi memanggil fungsi ini sendiri setelah sudut 4 di HttpClient.

Dushan
sumber
3

Saya memiliki masalah yang sama, saya menggunakan Visual studio 2015 yang memiliki versi naskah yang lebih lama.

Setelah memutakhirkan ekstensi masalah ini terselesaikan.

Unduh Tautan

Naveen
sumber
3

Saya menggunakan Angular 5.2 dan ketika saya menggunakannya import 'rxjs/Rx';melempar kesalahan lint berikut: TSLint: Impor ini masuk daftar hitam, impor submodule sebagai gantinya (impor-daftar hitam)

Lihat tangkapan layar di bawah ini: Impor rxjs / Rx dimasukkan dalam daftar hitam dalam Angular 5.2

SOLUSI: Memecahkannya dengan mengimpor hanya operator yang saya butuhkan . Contoh berikut:

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

Jadi perbaikannya adalah mengimpor hanya operator yang diperlukan saja.

Devner
sumber
@AndrewBenjamin Saya sangat menyarankan Anda melakukannya. Itu akan menghemat banyak masalah di jalan.
Devner
3

Cukup instal rxjs-compat untuk menyelesaikan masalah

npm i rxjs-compat --save-dev

Dan impor seperti di bawah ini

import 'rxjs/Rx';
Ankit Bhatia
sumber
3

Pertama-tama jalankan instalasi seperti di bawah ini:

npm install --save rxjs-compat@6

Sekarang Anda perlu mengimpor rxjsdi service.ts:

import 'rxjs/Rx'; 

Voila! masalah telah diperbaiki.

Brahmmeswara Rao Palepu
sumber
3

cukup jalankan npm install --save rxjs-compatitu memperbaiki kesalahan.

Disarankan di sini

trustidkid
sumber
Tolong jangan lupa untuk mengimpor 'rxjs / add / operator / map'
trustidkid
2

Saya mencoba semua jawaban yang mungkin diposting di atas tidak ada yang berhasil,

Saya mengatasinya dengan hanya me-restart IDE saya yaitu, Visual Studio Code

Semoga ini membantu seseorang.

Shylendra Madda
sumber
2

Saya juga menghadapi kesalahan yang sama. Salah satu solusi yang berhasil bagi saya adalah menambahkan baris berikut di file service.ts Anda alih - alihimport 'rxjs/add/operator/map' :

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

Sebagai contoh, app.service.ts saya setelah debugging seperti,

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
sumber
2

Jika setelah mengimpor impor 'rxjs / add / operator / map' atau impor 'rxjs / Rx' juga Anda mendapatkan kesalahan yang sama kemudian mulai ulang editor kode studio visual Anda, kesalahan akan diselesaikan.


sumber
1

untuk semua pengguna linux yang mengalami masalah ini, periksa apakah folder rxjs-compat terkunci. Saya punya masalah yang sama persis dan saya masuk terminal, menggunakan sudo su untuk memberikan izin ke seluruh folder rxjs-compat dan sudah diperbaiki. Itu dengan asumsi Anda mengimpor

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

dalam file project.ts di mana kesalahan .map asli terjadi.

Bahasa Jawa
sumber
1

Gunakan mapfungsi dalam pipefungsi dan itu akan menyelesaikan masalah Anda. Anda dapat memeriksa dokumentasinya di sini .

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
sumber
1

npm instal rxjs @ 6 rxjs-compat @ 6 --save

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

 }

jalankan perintah

 npm install rxjs-compat 

Saya hanya mengimpor

 import 'rxjs/add/operator/map';

restart kode vs, masalah terpecahkan.

Nadeem Qasmi
sumber
-1

Versi baru angular tidak mendukung .map Anda harus menginstal ini melalui install cmd npm - save rxjs-compat melalui ini yang dapat Anda nikmati dengan teknik lama. Catatan: jangan lupa untuk mengimpor baris ini.

import { Observable, Subject } from 'rxjs';
import 'rxjs/add/operator/map';
import 'rxjs/add/operator/catch';
Shailaja valiveti
sumber
1
Jawaban terlambat ini berlebihan.
Tom Faltesek