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

React+TypeScript中AxiosRequestHeaders类型不兼容问题求助

解决React+TypeScript中AxiosRequestHeaders类型不兼容问题

问题场景

在React+TypeScript项目中,编写authHeader函数从localStorage获取用户令牌并生成请求头对象,但在axios请求拦截器中赋值给config.headers时,触发类型错误:普通对象缺少AxiosHeaders类的set、get等方法。

错误信息

TS2322: Type '{ Authorization: string; }' is not assignable to type 'AxiosRequestHeaders'.
  Type '{ Authorization: string; }' is missing the following properties from type 'AxiosHeaders': set, get, has, delete, and 23 more.

原代码

AuthHeaders.ts

export default function authHeader(): AxiosRequestHeaders {
  type userToken = {
  accessToken: string;
};
  const localstorageUser = localStorage.getItem("user");
  if (!localstorageUser) {
    return {};
  }
  const user = JSON.parse(localstorageUser);
  if (user && user.token) {
    return { Authorization: `Token ${user.token}` };
  }
  return {};
}

AuthContext.ts调用片段

export const AuthContextProvider: React.FC<{ children: ReactNode }> = ({ children }) => {
  // ...其他代码
  const authAxios = axios.create();
  authAxios.interceptors.request.use((config) => {
    config.headers = authHeader();
    return config;
  });
}

解决方案

方案一:返回AxiosHeaders实例

修改authHeader函数,使用Axios提供的AxiosHeaders.from()或构造函数生成符合类型要求的实例:

import { AxiosHeaders, AxiosRequestHeaders } from 'axios';

export default function authHeader(): AxiosRequestHeaders {
  type userToken = {
    accessToken: string;
  };
  const localstorageUser = localStorage.getItem("user");
  if (!localstorageUser) {
    return new AxiosHeaders();
  }
  const user = JSON.parse(localstorageUser);
  if (user && user.token) {
    return AxiosHeaders.from({ Authorization: `Token ${user.token}` });
  }
  return new AxiosHeaders();
}

方案二:合并请求头而非直接覆盖

不替换整个config.headers,而是用Object.assign将自定义头合并到原有实例中,保留AxiosHeaders的方法:

export const AuthContextProvider: React.FC<{ children: ReactNode }> = ({ children }) => {
  // ...其他代码
  const authAxios = axios.create();
  authAxios.interceptors.request.use((config) => {
    Object.assign(config.headers, authHeader());
    return config;
  });
}

原因说明

Axios新版本中,AxiosRequestHeaders类型本质是AxiosHeaders类的实例,而非普通对象字面量。直接返回普通对象会导致类型不匹配,触发TS错误。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.02 19:01:27