'Observable <user>'类型中不存在属性'switchMap'

时间:2018-02-19 20:32:57

标签: angular visual-studio compiler-errors rxjs observable

尝试将switchMap运算符应用于我的Observable时,我收到以下错误消息:

  

属性'switchMap'在'Observable'类型上不存在。

我目前正在使用rxjs版本5.5.2,在我的组件中,我将其导入如下:

import 'rxjs/operator/switchMap';

但是,我仍然遇到编译错误。我已经查看了类似的问题,并没有找到适当的解决方案,对这里的问题有任何建议吗?

get appUser$() : Observable<AppUser> {
  return this.user$
    .switchMap(user => {
      if (user) return this.userService.get(user.uid);

      return Observable.of(null);
    });    
}

图像: enter image description here

3 个答案:

答案 0 :(得分:9)

如果您正在使用旧的&#34;补丁&#34;您应该从rxjs/add/operator/switchMap导入运营商的风格:

import 'rxjs/add/operator/switchMap';

由于RxJS 5.5带有&#34; pipable&#34;您应该从'rxjs/operators'导入的运算符:

import { switchMap } from 'rxjs/operators';

答案 1 :(得分:2)

我假设您使用的是Angular 6,这意味着您使用的是最新版本的RxJS。您需要管道操作员。

obs $ .switchMap(()=> {做东西...});

现在是

obs $ .pipe(switchMap(()=> {做东西...}));

编辑:请记住,在您的情况下,此observable由this.refreshToken返回。

this.refreshToken()。pipe(switchMap(()=> {做东西...}));

答案 2 :(得分:0)

我认为,如果您使用的是Angular 6,则应使用管道

版本小于角度6,下面的代码将起作用

        this.route.params.switchMap((data: Passengers) => 
        this.passengerService.getPassenger(data.id))
        .subscribe((data: Passengers) =>  this.passenger = data);

但是对于Angular 6,您应该通过管道传输操作符

    this.route.params.pipe(switchMap((data: Passengers) => 
    this.passengerService.getPassenger(data.id)))
    .subscribe((data: Passengers) =>  this.passenger = data);