You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Angular 6复用HttpHeaders时出现类型错误求助

问题分析与解决方案

你遇到的错误核心是对象字面量的语法使用错误,在传递HTTP请求配置项时,你没有正确指定headers这个键名,而是直接写了方法调用,导致TypeScript错误地把this当成了对象的属性,这显然不符合请求配置的类型定义要求。

错误原因拆解

你写的这段代码:

return this.http.post<SmartCard>(AppDefinitions.ApiSmartCardAdminPath, body, { this.GetHttpHeaders() })

这里的{ this.GetHttpHeaders() }是无效的对象字面量语法,TypeScript会将其解析为一个包含this属性的对象,但HTTP请求配置需要的是带有headers键的结构,所以才会抛出“this不存在于类型定义中”的错误。

正确的两种写法

方式一:直接使用AppDefinitions中的静态请求头

既然你已经把请求头封装到了AppDefinitions的静态属性里,直接在请求配置中明确指定headers键即可:

return this.http.post<SmartCard>(
  AppDefinitions.ApiSmartCardAdminPath,
  body,
  { headers: AppDefinitions.JsonHttpHeaders }
);

方式二:使用服务类中的GetHttpHeaders()方法

如果想用服务里的方法生成请求头,同样需要明确指定headers键:

return this.http.post<SmartCard>(
  AppDefinitions.ApiSmartCardAdminPath,
  body,
  { headers: this.GetHttpHeaders() }
);

额外小提示

Angular的HttpHeaders是不可变对象,每次调用set()都会返回一个新的实例,不过你这里只设置了一次content-type,当前的封装方式完全没问题。如果后续需要追加更多请求头,记得要重新赋值,比如:

// 正确的请求头追加方式
let headers = new HttpHeaders().set('content-type', 'application/json');
headers = headers.set('Authorization', 'Bearer ' + token);

内容的提问来源于stack exchange,提问作者MPoutanen

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.27 09:21:31