Angular错误 TS2554:在管道操作符上期望0个参数,但实际传递了x个参数。

5

我在可观察对象 getHappyDays() 的管道中遇到了 Error TS2554: Expected 0 arguments, but got 4 的错误。

getHappyDays() 可观察对象返回一个类型为 Observable<HttpResponse<IHappyDays>> | Observable<HttpErrorResponse> 的值,我已经包含了一个 stackblitz 来更好地展示这个问题。

 resolve(route: ActivatedRouteSnapshot, state: RouterStateSnapshot):
    Observable<IHappyDays> | Observable<never> {

    return this.happyService.getHappyDays()
      .pipe(//=>error thrown here
        first(),
        mergeMap((res) => {
          return of(res.body)
        })
      )
  }

https://stackblitz.com/edit/angular-3iujhb // 在 happy-resolver.service 文件中


请在问题中包含所有相关信息,而不是链接。链接中的信息应该只是支持性的,而不是精确解释问题的关键。 - user2864740
@user2864740 我已经在问题中添加了额外的代码和解释。 - Suhayb
Stackblitz并没有显示出这个问题。 - Phix
@Phix 我已经修复了 Stackblitze 的应用编辑链接,它位于 happy-resolver.service 文件中。 - Suhayb
1个回答

12
首先,在pipe()后缺少一个分号。主要问题是getHappyDays()中的联合返回类型。当您将其更改为Observable<HttpResponse<IHappyDays> | HttpErrorResponse>时,它将正常工作(请参见:https://github.com/ReactiveX/rxjs/issues/3388)。
关于接口设计的注意事项:我不会返回HttpErrorResponse作为值,因为这显然是一种错误。 Angular的HttpClient文档提供了一些处理错误的指南:https://angular.io/guide/http

你觉得我应该将这个问题重命名为“Observable的Union不能有管道操作符”吗? - Suhayb
是的,这样做可能有意义,其他人可以更容易地找到它。 - f.loris

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接