没有重载匹配此调用。最后一个重载给出了以下错误。类型 '"text"' 不可分配给类型 '"json"'

Posted

技术标签:

【中文标题】没有重载匹配此调用。最后一个重载给出了以下错误。类型 \'"text"\' 不可分配给类型 \'"json"\'【英文标题】:No overload matches this call. The last overload gave the following error. Type '"text"' is not assignable to type '"json"'没有重载匹配此调用。最后一个重载给出了以下错误。类型 '"text"' 不可分配给类型 '"json"' 【发布时间】:2020-03-14 19:00:21 【问题描述】:

我正在尝试使用带有 JWT 令牌的 Angular 从我的 API 获取 html 页面。但是如果我没有指定文本类型,编译器会吐出一个无法解析的错误(它会尝试将 HTML 解析为 JSON),所以我需要指定我的响应类型。

这是我的 component.ts:

  httpOptions = 
    headers: new HttpHeaders(
      'Content-Type':  'application/json',
      'Authorization': 'Bearer TOKENHERE'
    )
  ;
  constructor(private http: HttpClient)  

  ngOnInit() 


  
  fetchDashboard() 
    this.http.get('http://localhost:3000/avior/dashboard', responseType: 'text', this.httpOptions,).subscribe(j => console.log(j));


我尝试将内容类型删除或更改为 text/html,但无济于事。


我的 API 响应:

<html><head><title>Dashboard</title></head><body><h1>Dashboard works!</h1></body></html>

【问题讨论】:

内容类型标头是否正确?通过 POSTMAN 之类的客户端访问此 API 时,您传递了哪些标头? @NicholasK in Postman 我只指定 Authorization 标头与格式为 Bearer 的令牌 httpCilentModule 默认会解析您的请求,因此您必须指定内容类型 另外,为什么要在 GET 请求中指定 Content-Type?仅适用于 PUT、PATCH、POST(实际在其正文中发送数据的请求)的 AFAIK。 根据您之前的评论,无需将Content-Type 作为标题传入。 【参考方案1】:

您可以在您的组件中尝试以下操作,以查看您的呼叫是否适用于其他网站。以下内容应将请求页面的 html 作为字符串返回。如果这不适用于您的 API,那么问题可能不是您在组件中的代码,而是您的 API 返回的响应

const requestOptions: Object = 
  headers: new HttpHeaders().append('Authorization', 'Bearer <yourtokenhere>'),
  responseType: 'text'


this.http.get<string>('https://cors-anywhere.herokuapp.com/https://***.com/questions/tagged/angular', 
    requestOptions)
        .subscribe(response => 
               console.log(response);
        
);

【讨论】:

这可以作为评论而不是答案吗? No overload matches this call. :/ 我已经更新了我的答案,以防止 @Munchkin 出现“不超载”消息。我已经在一个示例项目中尝试过这个解决方案,它会在控制台中返回请求的 url 的 HTML。 @NicholasK 我已经发布了这个答案,因为它是上述问题的解决方案,并且是一种从 url 检索 HTML 的方法,例如他的 API。 这确实有效!现在如何添加 JWT Token 以及如何让检索到的内容刷新视图?【参考方案2】:

我是这样做的:

    getDivisionName(x: string): Promise<any> 
    return this.httpClient
      .get<any>(this.serviceUrl + `/something/$x/`, 
        responseType: 'text' as 'json',
      )
      .toPromise();
  

【讨论】:

以上是关于没有重载匹配此调用。最后一个重载给出了以下错误。类型 '"text"' 不可分配给类型 '"json"'的主要内容,如果未能解决你的问题,请参考以下文章

打字稿路由错误 - 没有重载匹配此调用

Vue-Router4/TypeScript“没有重载匹配这个调用”

打字稿,样式组件错误:TS2769:没有重载匹配此调用。重载 1 of 2

Typescript http.get 错误:没有重载匹配此调用

接口的重载方法不能接受联合类型:“没有重载匹配此调用”

在 React Typescript 中遇到的 No 重载与此调用匹配的错误