首页 > 解决方案 > 错误:类型 'string' 不可分配给类型 '"body"'。在角度 8

问题描述

src/app/new-applicant/new-applicant.service.ts(35,65) 中的错误:错误 TS2345:类型参数“{ reportProgress: boolean; 观察:字符串;标头:HttpHeaders;}' 不能分配给类型为 '{ headers?: HttpHeaders | { [标题:字符串]:字符串 | 细绳[]; }; 观察?:“身体”;参数?: HttpParams | { [参数:字符串]:字符串 | 细绳[]; }; 报告进度?:布尔值;响应类型?:“json”;withCredentials?:布尔值;}'。属性“观察”的类型不兼容。类型 'string' 不能分配给类型 '"body"'。

    public generateHeaders()
    {
        let access=JSON.parse(sessionStorage.getItem("meta_info")).access
        // access=access.access;
        console.log(access)
        var headers_object = new HttpHeaders().set("Authorization", "Bearer " + access);
        const httpOptions = {
            reportProgress:true,
            observe:'events',
            headers: headers_object
        };
        return httpOptions
    }

服务

  public registerNewApplicant(data)
  {
    return this.http.post(environment.baseURL+"applicant/",data,this.jwtTokenGenerator.generateHeaders())
  }

标签: angulartypescript

解决方案


用于as const强制 TypeScript 将类型推断observe为文字类型"events",而不是string

observe: 'events' as const,

HttpClient 中的每个方法都有一堆重载,它们期望observe是以下之一:"body", "events", "response".

默认情况下,TypeScript 将字符串文字的类型推断为string,但在某些情况下(例如初始化 aconstreadonly字段)除外。的返回类型generateHeaders最终是

{ reportProgress: boolean; observe: string; headers: HttpHeaders; }

关于observe存在的信息"events"丢失了,因此该值与任何重载都不匹配。


推荐阅读