प्रॉपर्टी 'मैप' 'ऑब्जर्वेबल <रिस्पांस>' टाइप पर मौजूद नहीं है


199

मैं कोणीय से एपीआई कॉल करने की कोशिश कर रहा हूं लेकिन मुझे यह त्रुटि मिल रही है:

Property 'map' does not exist on type 'Observable<Response>'

इस तरह के प्रश्न के उत्तर से मेरा मुद्दा हल नहीं हुआ: कोणीय 2 बीटा.17: संपत्ति का नक्शा 'प्रकार' अवलोकन योग्य <प्रतिक्रिया> 'पर मौजूद नहीं है

मैं कोणीय 2.0.0-beta.17 का उपयोग कर रहा हूं।

जवाबों:


371

आपको mapऑपरेटर आयात करने की आवश्यकता है :

import 'rxjs/add/operator/map'

या अधिक आम तौर पर:

import 'rxjs/Rx';

सूचना: RxJS 6.x.xऔर इसके बाद के संस्करण के लिए, आपको पाइप करने योग्य ऑपरेटरों का उपयोग करना होगा जैसा कि नीचे दिए गए कोड स्निपेट में दिखाया गया है:

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

यह RxJS टीम द्वारा अधिक जानकारी के लिए RxJS के चैंज में ब्रेकिंग परिवर्तन देखने के लिए समर्थन को हटाने के कारण होता है ।

चैंज से:

ऑपरेटरों : उपलब्ध ऑपरेटरों को अब rxjs से आयात करना चाहिए जैसे import { map, filter, switchMap } from 'rxjs/operators';:। कोई गहरा आयात नहीं।


वृद्धि में अमान्य मॉड्यूल नाम, मॉड्यूल '../../bservable' नहीं मिल सकता है। प्रॉपर्टी 'मैप' 'ऑब्जर्वेबल <रिस्पांस>' टाइप पर मौजूद नहीं है।
मलिक कश्मीरी

आप Observableकक्षा को कैसे आयात करते हैं ? इस तरह: import {Observable} from 'rxjs/Observable';या import {Observable} from 'rxjs/Rx';?
थिएरी टेम्पलर

मैं इस वर्ग को अब तक आयात नहीं कर रहा हूं
मलिक कश्मीरी

1
मैं Angular 2 RC1 और rxjs 5.0.0-beta2 का उपयोग कर रहा हूं। मैंने 'rxjs / ऑब्जर्वेबल' से ऑब्जर्वेबल को आयात {ऑब्जर्वेबल} के रूप में आयात किया है; और आयातित मैप ऑपरेटर जैसे आयात 'आरएक्सजे / ऐड / ऑपरेटर / मैप'; यह काम कर रहा था जब मैं बीटा 7 का उपयोग कर रहा था। मैंने अभी RC1 में अपग्रेड किया और यह टूट गया।
दर्शन पुराणिक

4
पहले इस कमांड को अपने प्रोजेक्ट के बनाम कोड टर्मिनल में लिखें और प्रोजेक्ट को पुनरारंभ करें। npm install rxjs-compat, mapऑपरेटर को आयात करने से ।
करण रयानी

162

इसे फिर से देखना क्योंकि मेरा समाधान यहाँ सूचीबद्ध नहीं है।

मैं rxjs 6.0 के साथ कोणीय 6 चला रहा हूं और इस त्रुटि में भाग गया।

यहाँ मैंने इसे ठीक करने के लिए क्या किया है:

मैं बदल गया

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

बस होना चाहिए:

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

मुझे यहाँ ठीक लगा:

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


1
मुझे यकीन नहीं है कि माइग्रेशन टूल rxjs-5-to-6-migrate इसे क्यों नहीं उठाता है? यह दिलचस्प है कि यह डू / टैप री-मैपिंग को संबोधित नहीं करता है जो कि मेरे वातावरण में अभी भी अनसुलझे हैं भले ही आयात उपकरण इसे पहचानता है। कोणीय विकास में मेरे 'अप्रत्याशित समय बर्बाद' का 90% RxJS दस्तावेज़ और कोड सीमा मुद्दों के साथ बिताया जाता है, यह वास्तव में निराशाजनक है।
जो

1
धन्यवाद! आप एक जीवन रक्षक है!! जो कोई भी रुचि रखता है, इस परिवर्तन का पूरा संदर्भ यहां उपलब्ध है: github.com/ReactiveX/rxjs/blob/master/…
malvadao

21
यह मेरे लिए काम करता है, मुझे भी जोड़ने की जरूरत हैimport { map } from 'rxjs/operators';
पॉल

मजेदार, यह ठीक उसी तरह है जैसे हमने इसे कोणीय 6 उन्नयन पर तय किया - जो नवीनतम आरएक्सजे को भी लाया।
मैक्स

2
@ थापुल धन्यवाद। के बारे में .catch, हम की catchErrorतरह उपयोग कर सकते हैं .pipe(catchError(this.handleError))?
FindOutIslamNow

60

इस कमांड को अपने प्रोजेक्ट के बनाम कोड टर्मिनल में लिखें और प्रोजेक्ट को पुनरारंभ करें।

npm install rxjs-compat

आपको mapइसे लिखकर ऑपरेटर को आयात करना होगा:

import 'rxjs/add/operator/map';

1
अगर यह सभी फाइलों को बंद नहीं करता है और बनाम स्टूडियो को पुनरारंभ करता है।
अजय ताकुर

1
इसने मेरे लिए काम किया, साझा करने के लिए धन्यवाद।
thesamoanppprogrammer

30

कोणीय 7 वी के लिए

परिवर्तन

import 'rxjs/add/operator/map';

सेवा

import { map } from "rxjs/operators"; 

तथा

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

इससे मुझे @ कटान 24 में मदद मिली क्योंकि मैंने पाइप के साथ सही सिंटैक्स देखा।
पंकोलॉजिस्ट

25

मुझे Angular 2.0.1 के साथ एक ही मुद्दा मिला क्योंकि मैं ऑब्जर्वेबल से आयात कर रहा था

import { Observable } from 'rxjs/Observable';

मैं इसके बजाय इस मार्ग से वेधनीय आयात करने पर अपनी समस्या का समाधान करता हूं

import { Observable } from 'rxjs';

इस अभ्यास को बंडल-आकार के अनुकूल नहीं माना जाता है क्योंकि यह कथन बंडल में उन सभी ऑपरेटरों Observable(जिनमें आप उपयोग नहीं करते हैं) का आयात करता है। इसके बजाय, आपको प्रत्येक ऑपरेटर को व्यक्तिगत रूप से आयात करना चाहिए। मैं "लेटेस्टेबल ऑपरेटर्स" का उपयोग करने की सलाह देता हूं, जो कि आरएक्सजेएस वी 5.5 में बेहतर पेड़-झटकों का समर्थन करने के लिए पेश किया गया था।
सरुण अंतरालावन

15

Rxjs में 6 मानचित्र ऑपरेटर उपयोग को बदल दिया गया है अब आपको इसे इस तरह उपयोग करने की आवश्यकता है।

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

संदर्भ के लिए https://www.academind.com/learn/javascript/rxjs-6-what-changed/#operators-update-path


इस उत्तर पर ध्यान दें क्योंकि किसी को भी ऐसा करने RxJS v6की आवश्यकता नहीं होगी .pipe()या कोई भी ऑपरेटर ऑब्जर्वेबल से सीधे काम नहीं करेगा। आपको एक त्रुटि दिखाई देगी, जैसेProperty 'share' does not exist on type 'Observable<{}>'
बजे

8

बस टर्मिनल में टाइप करके rxjs- कम्प्रेसर स्थापित करें:

npm install --save rxjs-compat

फिर आयात करें:

import 'rxjs/Rx';

7

नवीनतम कोणीय 7 में। *। * , आप इसे इस प्रकार आज़मा सकते हैं:

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

और फिर आप इनका उपयोग methodsइस प्रकार कर सकते हैं :

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

अधिक जानकारी के लिए इस डेमो की जाँच करें ।


5

मेरे मामले में यह केवल नक्शा और वादा शामिल करने के लिए पर्याप्त नहीं होगा:

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

मैंने इस समस्या को कई rxjs घटकों को आयात करके हल किया क्योंकि आधिकारिक दस्तावेज अनुशंसा करता है:

1) एक app / rxjs-ऑपरेटरों फ़ाइल में बयान आयात करें:

// 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) आयात rxjs- ऑपरेटर ही आपकी सेवा में:

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

मुझे लगता है कि हर सेवाओं में rxjs-ऑपरेटर्स को शामिल करना सही नहीं है। यह केवल app.module.ts में शामिल किया जाना चाहिए, लेकिन दुर्भाग्य से एनजी टेस्ट में त्रुटि होती है यदि ऑपरेटरों को विशिष्ट स्थानों पर आयात नहीं किया जाता है
मोहन राम

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

उपरोक्त फ़ंक्शन में आप देख सकते हैं कि मैंने HttpClient का उपयोग करने के बाद से res.json () का उपयोग नहीं किया। यह res.json () स्वचालित रूप से लागू होता है और अवलोकन योग्य (HttpResponse <string>) लौटाता है। अब आपको HttpClient में कोणीय 4 के बाद इस फ़ंक्शन को स्वयं कॉल करने की आवश्यकता नहीं है।


3

मेरे पास एक ही मुद्दा था, मैं विज़ुअल स्टूडियो 2015 का उपयोग कर रहा था जिसमें टाइपस्क्रिप्ट का एक पुराना संस्करण था।

विस्तार के उन्नयन के बाद समस्या हल हो गई।

डाउनलोड लिंक


3

मैं कोणीय 5.2 का उपयोग कर रहा हूं और जब मैं इसका उपयोग import 'rxjs/Rx';करता हूं तो मुझे निम्नलिखित एक प्रकार की त्रुटि होती है: TSLint: इस आयात को ब्लैकलिस्ट किया गया है, इसके बजाय एक सबमॉड्यूल आयात करें (आयात-ब्लैकलिस्ट)

नीचे स्क्रीनशॉट देखें: Rxjs / Rx के आयात को कोणीय 5.2 में ब्लैकलिस्ट किया जाता है

समाधान: इसे केवल उन ऑपरेटरों को आयात करके हल करना चाहिए जिनकी मुझे आवश्यकता थी । उदाहरण इस प्रकार है:

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

तो तय यह होगा कि विशेष रूप से केवल आवश्यक ऑपरेटरों को ही आयात किया जाए।


@AndrewBenjamin मैं अत्यधिक सुझाव देता हूं कि आप ऐसा करें। जो आपको लेन के नीचे आने वाली परेशानी से बचाएगा।
डेनेर

3

समस्या को हल करने के लिए बस rxjs -ोहिमिटर स्थापित करें

npm i rxjs-compat --save-dev

और इसे नीचे की तरह आयात करें

import 'rxjs/Rx';

3

नीचे के रूप में सबसे पहले रन इंस्टॉलेशन:

npm install --save rxjs-compat@6

अब आप आयात करने की आवश्यकता rxjsमें service.ts:

import 'rxjs/Rx'; 

देखा! समस्या ठीक कर दी गई है।



2

मैंने उन सभी संभावित उत्तरों की कोशिश की, जिनमें से किसी ने भी काम नहीं किया,

मैंने इसे केवल अपनी आईडीई यानी विज़ुअल स्टूडियो कोड को फिर से शुरू करके हल किया

यह किसी की मदद कर सकता है।


2

मुझे भी उसी त्रुटि का सामना करना पड़ा। एक समाधान है कि मेरे लिए काम किया अपने में निम्नलिखित लाइनों को जोड़ने के लिए था service.ts फाइल के बजाय की import 'rxjs/add/operator/map':

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

एक उदाहरण के लिए, मेरे app.service.ts डिबगिंग के बाद की तरह था,

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

यदि आयात करने के बाद 'rxjs / add / ऑपरेटर / मैप' या 'rxjs / Rx' आयात करने के बाद भी आपको वही त्रुटि मिल रही है, तो अपने दृश्य स्टूडियो कोड संपादक को पुनरारंभ करें, त्रुटि हल हो जाएगी।


1

उन सभी लिनक्स उपयोगकर्ताओं के लिए जो इस समस्या से जूझ रहे हैं, जांचें कि क्या rxjs -ोहॉम्प्टर फ़ोल्डर बंद है। मेरे पास यह एक ही मुद्दा था और मैं टर्मिनल में गया था, पूरे आरएक्सजे-कॉम्पिटिटर फ़ोल्डर को अनुमति देने के लिए सुडो सू का उपयोग किया और यह तय किया गया था। मान लिया कि आपने आयात किया

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

जहां मूल .मैप त्रुटि हुई है।


1

mapफ़ंक्शन में pipeफ़ंक्शन का उपयोग करें और यह आपकी समस्या को हल करेगा। आप यहां दस्तावेज देख सकते हैं

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

 }

कमांड चलाएं

 npm install rxjs-compat 

मैं सिर्फ आयात करता हूं

 import 'rxjs/add/operator/map';

बनाम कोड को पुनरारंभ करें, समस्या हल हो गई है।


-1

कोणीय नया संस्करण समर्थन नहीं करता है। इसके लिए आपको इसे cmd npm install --save rxjs -ोहिमर्स के माध्यम से इंस्टॉल करना होगा। इसके माध्यम से आप पुरानी तकनीक का आनंद ले सकते हैं। नोट: इन लाइनों को आयात करने के लिए मत भूलना।

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

1
यह देर से जवाब बेमानी है।
टॉम फाल्केस्क
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.