私はこのようなオブジェクト/配列を返す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'.
しかし、アプリケーションは正常に動作しており、このデータを正しく表示しています。しかし、このエラーは厄介です。
私に何ができる?
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(...);
戻り値のタイプを(data:any)=> {...}で指定する必要がありました
次のようにng6にマップをインポートする必要があります。
import { map } from 'rxjs/operators';
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))));
}
}
これを試して:
npm install rxjs @ 6 rxjs-compat @ 6 --saven
詳細については、 Angular 2 beta.17:プロパティ 'map'がタイプ 'Observable <Response>'に存在しません にアクセスしてください。