2

我按照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';

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

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

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


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

老式:

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

3 回答 3

5

一切都在RxJS v5.x 到 v6 更新指南中进行了解释

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

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

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

于 2018-05-18T13:31:01.610 回答
5

您需要pipe在 Observable 上使用方法并在内部传递 map 函数,例如:

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

of([1,2,3]).pipe(
  map(i => i*2)
);
于 2018-05-18T13:33:54.917 回答
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)
)
于 2018-05-18T13:37:24.717 回答