类型 'Observable<ArrayBuffer>' 不可分配给类型 'Observable<HttpResponse<User>>'

Posted

技术标签:

【中文标题】类型 \'Observable<ArrayBuffer>\' 不可分配给类型 \'Observable<HttpResponse<User>>\'【英文标题】:Type 'Observable<ArrayBuffer>' is not assignable to type 'Observable<HttpResponse<User>>'类型 'Observable<ArrayBuffer>' 不可分配给类型 'Observable<HttpResponse<User>>' 【发布时间】:2022-01-08 12:22:01 【问题描述】:

晚上好,我正在尝试设置身份验证服务,但登录功能一直显示此错误:

类型 'Observable' 不可分配给类型 '可观察的'。类型“ArrayBuffer”缺少 来自“HttpResponse”类型的以下属性:body、type、 克隆、标题和另外 4 个。

功能如下:

  login(user:User): Observable<HttpResponse<User>>
    return this.http.post<User>(`$this.apiUrl/login`, user, observe: Response);
  

用户模型界面是:

export interface User 
    username: string;
    password:string;

我调用这个函数是我的登录组件:

onLogin(user: User):void
  this.subs.add(
  this.authService.login(user).subscribe(
    (response) =>
      this.authService.addTokenToCache(response.headers.get('Jwt-Token') || '');
      // this.authService.addUserToCache(response.body|| '');
      this.router.navigateByUrl("/home");
      this.showLoading=false;
    ,
    (error: HttpErrorResponse)=>
      alert(error.message);
      this.showLoading=false;
    
  ))

我该如何解决这个问题?

【问题讨论】:

【参考方案1】:

您现在实际上正在使用 fetch api 接口Response,这就是您收到此错误的原因。 observe 选项是 'body''events''response'。注意响应中的小写r,它也是一个字符串。话虽如此,您的代码应该是:

return this.http.post<User>(`$this.apiUrl/login`, user, observe: 'response');

【讨论】:

谢谢你这个作品,我应该注意区分大小写。

以上是关于类型 'Observable<ArrayBuffer>' 不可分配给类型 'Observable<HttpResponse<User>>'的主要内容,如果未能解决你的问题,请参考以下文章

类型 '() => Observable<any>' 不可分配给类型 '() => Observable<any>'

类型 'Observable<ArrayBuffer>' 不可分配给类型 'Observable<HttpResponse<User>>'

错误 TS2416 类型 'Observable<APIResponse>' 不可分配给类型 'Observable<User>'

Observable<> 不可分配给类型 Observable<SomeType[]>

无法将 Observable<Store> 类型的类型值转换为预期的参数类型 Observable<Store?>

如何组合多个 Observable 类型数组 Observable<T[]>?