错误:类型'string'不能分配给类型'“ body”'。在角度8

时间:2020-02-24 17:21:24

标签: angular typescript

src / app / new-applicant / new-applicant.service.ts(35,65)中的

ERROR:错误 TS2345:类型为'{reportProgress:boolean;观察:字符串; 标头:HttpHeaders; }'不可分配给类型'{ 标头?:HttpHeaders | {[header:string]:字符串|串[]; }; 观察?参数:HttpParams | {[参数:字符串]:字符串| 串[]; }; reportProgress ?:布尔值; responseType ?:“ 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())
  }

3 个答案:

答案 0 :(得分:3)

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

observe: 'events' as const,

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

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

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

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

答案 1 :(得分:2)

将其发布为“事件”

observe: 'events' as 'events'

答案 2 :(得分:0)

我不是打字专家,但是如果您为generateHeaders方法的签名中提供返回类型,它将解决您的错误。

public generateHeaders(): any {
  ...
}