axios设置请求头ts类型检测报错的问题

文章介绍了在使用Axios1.1.3版本之后,在TypeScript环境下设置请求头时遇到的类型检测错误,特别是自定义属性Authorization。提出了三种解决方案:降级Axios版本、使用config.headers.set方法和扩展AxiosRequestConfig接口。其中,使用config.headers.set并进行类型检查被认为是最佳解决方案。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

axios设置请求头ts类型检测报错

在写项目的时候给请求拦截头加登录验证的时候遇到的,发现在axios1.1.3的版本之后,ts中,添加请求的通过 . 的时候,类型检测会报错

在这里插入图片描述
Authorization这个属于自定义的属性,ts不认,vue可以,相当于对象的创建与赋值

解决办法 1:

将axios 的版本降到1.1.3的版本,但是在工作中,肯定是用的最新版本,(不是最优解)
你需要先卸载axios现在的版本,使用命令,这里楼主使用的是yarn,各位大大可以使用其他的
yarn remove 你要卸载的依赖包
安装:yarn add axios@1.1.3
在这里插入图片描述
在这里,作者我用的是axios1.2.2的版本,是已经不能使用 **.**点语法来新增请求头了。

**办法2(最优解) :

**用axios 里面提供的config.headers.set方法来解决,set可以设置请求头的成员,就是自定义请求头成员
但是不止只设置 config.headers.set(“Authorization”, Bearer ${token}, false)这一句,ts会报错,因为set方法的类型太多了,ts没有办法识别,、
办法2的解决办法:
在这里插入图片描述 在上图中,先进行类型判断 if (typeof config.headers.set === ‘function’) {
config.headers.set(“Authorization”, Bearer ${token}, false)
}

可以简洁版 : typeof config.headers.set === ‘function’ && config.headers.set(“Authorization”, Bearer ${token}, false) 这是利用的逻辑中断

办法三(不推荐):

继承接口 AxiosRequestConfig的类型
ts不推荐使用any关键字,因为any就是为了逃避ts类型检测
interface RequestConig extends AxiosRequestConfig{
headers:any
}

instance.interceptors.request.use(
(config:RequestConig) => {
const store = useUserStore()
const token = store.userInfo?.token
if (token && config.headers) {
config.headers.Authorization = Bearer ${token}
}

}
return config
},
(err) => {
return Promise.reject(err)
}
)
以上就是楼主我遇到的一个ts的问题,如果有其他的建议,希望各位大大,多在评论区讨论或者私聊作者!

### 如何在 Axios设置请求头 当使用 Axios 发起 HTTP 请求时,可以通过多种方式来设置请求头。一种常见的方式是在发起请求时直接指定 `headers` 属性: ```javascript axios.post('/user', { firstName: 'Fred', lastName: 'Flintstone' }, { headers: { 'Content-Type': 'application/json', 'Authorization': 'Bearer your_token_here' } }) .then(function (response) { console.log(response); }) .catch(function (error) { console.error(error); }); ``` 另一种方法是通过创建自定义实例并在此实例配置中设定默认头部信息[^1]。 对于全局范围内的所有请求,默认请求头也可以被一次性地设置好: ```javascript // 添加一个请求拦截器 axios.interceptors.request.use(function (config) { // 在发送请求之前做些什么 config.headers['Authorization'] = 'Bearer new_token'; return config; }, function (error) { // 对请求错误做些什么 return Promise.reject(error); }); // 此后所有的请求都会自动携带上述 Authorization 头部信息 axios.get('/someEndpoint') .then(/* ... */) .catch(/* ... */); ``` 如果目标在于跨域资源共享(CORS),则可能需要服务端配合,在响应首行加入适当的内容类型声明以及允许的方法列表等 CORS 相关头部字段[^3]。 #### 设置单次请求的特定头部信息 除了以上提到的技术外,还可以针对每一次单独发出的请求动态调整其头部参数,这非常适合那些每次调用API接口所需认证令牌或其他变量都不同的场景。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值