【问题标题】:Property 'map' does not exist on type 'Observable' after upgrading rxjs to 6将 rxjs 升级到 6 后,“可观察”类型上不存在属性“地图”
【发布时间】:2018-10-28 22:59:52
【问题描述】:

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

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

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

【问题讨论】:

  • 你试过import 'rxjs/add/operator/map';吗?
  • 试试import { map } from 'rxjs/operators';

标签: angular rxjs rxjs5 rxjs6 rxjs-compat


【解决方案1】:

你需要在 Observable 上使用 pipe 方法并在里面传递 map 函数,比如:

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

of([1,2,3]).pipe(
  map(i => i*2)
);

【讨论】:

  • 这个答案对 OP 在除了修复导入方面需要做的事情提出了一个额外的重要说明。
  • 实际上,这只有在您安装了rxjs-compat 之后才会起作用。在 RxJS 6 中,'rxjs/observable''rxjs/observable/of' 都不再存在了。
  • 确定,固定导入
  • 谢谢!您的回答帮助我找到了真正的问题。我为其他人更新了我的问题以反映我的实际问题。
【解决方案2】:

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 后不应该使用它。

【讨论】:

    【解决方案3】:

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

    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)
    )
    

    【讨论】:

      猜你喜欢
      • 2017-04-01
      • 2018-10-16
      • 2018-11-03
      • 2018-12-05
      • 2018-11-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多