物业'地图'在类型' Observable'中不存在将rxjs升级到6之后

时间:2018-05-18 13:26:15

标签: angular rxjs rxjs5 rxjs6 rxjs-compat

我使用https://update.angular.io的说明将我的Angular应用程序从5.2升级到6.0。

现在我的Angular应用程序由于" rxjs-5-to-6-migrate"而无法构建。迁移:

  

bla.ts中的错误:错误TS2339:   物业'地图'在类型' Observable'。

上不存在

我有以下导入:

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

如果我像这样更改导入它可以工作:

import { Observable } from 'rxjs/observable';
import 'rxjs/Rx';

但我不明白为什么......我想使用显式导入而不是导入所有运算符。

更新:正如一些答案所指出的,我必须使用管道才能使用运营商。这是我的问题,因为我认为我仍然可以将操作符链接到observables。

旧式:

import { Observable } from 'rxjs/Observable';
import 'rxjs/add/observable/of';
import 'rxjs/add/operator/map';
import 'rxjs/add/operator/catch';

this.http.get('/api/appsettings/get').map(data => { return true; }).catch(() => { return Observable.of(false); });

新风格

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

this.http.get('/api/appsettings/get').pipe(map(data => { return true; }), catchError(() => { return of(false); }));

3 个答案:

答案 0 :(得分:5)

RxJS v5.x to v6 Update Guide

中解释了所有内容

仅从'rxjs/operators'和“创建”运算符'rxjs'导入运算符:

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

rxjs/Rx导入只是因为您添加了rxjs-compat个包。升级到RxJS 6后,不应使用它。

答案 1 :(得分:5)

你需要在Observable上使用import { of } from 'rxjs'; import { map } from 'rxjs/operators'; of([1,2,3]).pipe( map(i => i*2) ); 方法并在里面传递map函数,比如:

 <input type="text" id="duyd" name="dued" for="tot paid">

答案 2 :(得分:1)

您的导入现在应该如下所示:

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

你不能使用Observable.of你必须使用of()

你需要将.pipe中的任何运算符包含在内:

.pipe(
     finalize(() => { this.isBusy = false; }),
     take(1),
     map(DATA => DATA.MESSAGEID)
)