web-dev-qa-db-ja.com

Angular 6プロパティ 'map'はタイプ 'Object'に存在しません

私はこのようなオブジェクト/配列を返すAPIを持っています:

(2) [{...}, {...}]      object

  0: {a: '1', b: {id: '1'}}
  1: {a: '2', b: {id: '2'}}

したがって、オブジェクトの配列のように見えます(ただし、デバッグでは「オブジェクト」と表示されます)。

だから私のコードには:

return this.http.get(this.url).pipe(
  map(datas => {
    return datas.map(data => {
      let object = {
        a: data['a'],
        b: data['b']['id'],
      }
      return object;
    })
  })
);

しかしそこに:

return datas.map(data => {

エラーが発生しました:

Property 'map' does not exist on type 'Object'.

しかし、アプリケーションは正常に動作しており、このデータを正しく表示しています。しかし、このエラーは厄介です。

私に何ができる?

4
peryztor

RXJS6では、次の演算子の名前が変更されました

catch() => catchError()
do() => tap()
finally() => finalize()
switch() => switchAll()

さらに、一部のObservable-creationメソッドの名前が変更/リファクタリングされました。

throw() => throwError()
fromPromise() => from() (this automatically detects the type)

MAPの場合構文

import { map } from 'rxjs/operators';

myObservable
  .pipe(map(data => data * 2))
  .subscribe(...);
5
Vignesh

戻り値のタイプを(data:any)=> {...}で指定する必要がありました

2
Laurie Clark

次のようにng6にマップをインポートする必要があります。

import { map } from 'rxjs/operators';
1
Viclotana

Angular 6x with rxjs 6.3.3でこれを行うことができます。file(app.component.ts)で

import { Component } from '@angular/core';
import { HttpClient, HttpParams, HttpHeaders} from '@angular/common/http';
import { Observable, throwError } from 'rxjs';
import { map, catchError, retry } from 'rxjs/operators';

@Component({
  selector: 'app-root',
  templateUrl: './app.component.html',
  styleUrls: ['./app.component.css']
})

export class AppComponent 
{    
  _url = 'http://...';
  constructor( private http: HttpClient ) { }
  articles: Observable<any>;

  // Method and constructor
  getAPIRest() 
  {       
    const params = new HttpParams().set('parameter', 'value');
    const headers = new HttpHeaders().set('Autorization', 'auth-token');
    this.articles = this.http.get(this._url + '/articles', { params, headers })
                 .pipe( retry(3),
                        map((data => data),
                        catchError(err => throwError(err))));
  }
}
1
EdgarMorales

これを試して:

npm install rxjs @ 6 rxjs-compat @ 6 --saven

詳細については、 Angular 2 beta.17:プロパティ 'map'がタイプ 'Observable <Response>'に存在しません にアクセスしてください。

0
Citizen