将rxjs升级到6后,属性“ map”在类型“ Observable”上不存在

Sha*_*iel 1 rxjs rxjs5 angular rxjs6 rxjs-compat

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

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

bla.ts中的错误:错误TS2339:类型“可观察”上不存在属性“地图”。

我有以下进口:

import { Observable } from 'rxjs/observable';
import { of } from 'rxjs/observable/of';
import { map } from 'rxjs/operators';
Run Code Online (Sandbox Code Playgroud)

如果我这样更改导入,它将起作用:

import { Observable } from 'rxjs/observable';
import 'rxjs/Rx';
Run Code Online (Sandbox Code Playgroud)

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


更新:正如一些答案指出的那样,我必须使用管道才能使用运算符。这是我的问题,因为我认为我仍然可以将操作员链接到可观察对象。

老款式:

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); });
Run Code Online (Sandbox Code Playgroud)

新风格

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); }));
Run Code Online (Sandbox Code Playgroud)

mar*_*tin 5

RxJS v5.x至v6更新指南中的所有内容均在此处进行了说明

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

import { map } from 'rxjs/operators';
import { of } from 'rxjs';
Run Code Online (Sandbox Code Playgroud)

rxjs/Rx仅由于您添加了rxjs-compat软件包,才可以从中导入。升级到RxJS 6后,不应使用它。


Vit*_*rov 5

您需要pipe在Observable 上使用method并在其中传递map函数,例如:

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

of([1,2,3]).pipe(
  map(i => i*2)
);
Run Code Online (Sandbox Code Playgroud)