首页 文章

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

提问于
浏览
1

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

现在我的Angular应用程序没有构建,因为“rxjs-5-to-6-migrate”迁移:

bla.ts中的错误:错误TS2339:类型'Observable'上不存在属性'map' .

我有以下导入:

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

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

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

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


UPDATE: 正如一些答案所指出的,我必须使用管道才能使用运算符 . 这是我的问题,因为我认为我仍然可以将运算符链接到可观察量 .

老式:

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 回答

  • 4

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

    import { of } from 'rxjs';
    import { map } from 'rxjs/operators';
    
    of([1,2,3]).pipe(
      map(i => i*2)
    );
    
  • 1

    一切都在RxJS v5.x to v6 Update Guide解释

    仅从 'rxjs/operators' 和"creation"运算符 'rxjs' 导入运算符:

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

    rxjs/Rx 导入仅因为您添加了 rxjs-compat 包而起作用 . 升级到RxJS 6后,不应使用它 .

  • 4

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

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

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

    你需要将所有运算符包装在_1264776中,如下所示:

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

相关问题