【问题标题】:Property 'switchMap' does not exist on type 'Observable<User>''Observable<User>' 类型上不存在属性 'switchMap'
【发布时间】:2018-07-30 03:15:23
【问题描述】:

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

“可观察”类型上不存在属性“switchMap”。

我目前使用的是 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);
    });    
}

图片:

【问题讨论】:

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


    【解决方案1】:

    我假设您使用的是 Angular 6,这意味着您使用的是最新版本的 RxJS。您需要将您的运营商作为

    obs$.switchMap(() => { do stuff... });
    

    改成

    obs$.pipe(switchMap(() => { do stuff... }));
    

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

    this.refreshToken().pipe(switchMap(() => { do stuff... }));
    

    【讨论】:

      【解决方案2】:

      如果您使用的是较旧的“补丁”样式的运算符,则应该从 rxjs/add/operator/switchMap 导入:

      import 'rxjs/add/operator/switchMap';
      

      从带有“pipable”操作符的 RxJS 5.5 开始,您应该从 'rxjs/operators' 导入:

      import { switchMap } from 'rxjs/operators';
      

      【讨论】:

      • 我在管道 (user => { }) 时遇到问题,
      【解决方案3】:

      我认为如果您使用的是 Angular 6,那么您应该使用 pipe

      低于 Angular 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);
      

      【讨论】:

        猜你喜欢
        • 2018-01-29
        • 1970-01-01
        • 1970-01-01
        • 2018-11-24
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多