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

Axios异步请求返回类型与React Context定义不匹配的类型错误

解决React Context中Axios API调用的类型不匹配问题

问题核心

你遇到的类型错误本质是异步函数的返回值类型和Context预期的同步类型不匹配:getAuthJWT是异步函数,默认返回Promise<void | JWT>,但你的Context定义期望的是同步的void | JWT,所以类型校验报错。这跟Axios的void配置无关。

解决方案

方案1:让Context接受异步函数类型

如果你的业务逻辑就是需要通过异步函数获取JWT,直接修正Context的类型定义,使其匹配异步函数的返回值:

  1. 重新定义Context类型:
interface AuthContextType {
  getAuthJWT: () => Promise<JWT | void>;
  // 其他需要的属性...
}

const AuthContext = React.createContext<AuthContextType | undefined>(undefined);
  1. 确保getAuthJWT的实现符合类型:
const getAuthJWT = async (): Promise<JWT | void> => {
  try {
    const response = await axios.get<JWT>('/api/auth/jwt');
    return response.data;
  } catch (err) {
    console.error('获取JWT失败:', err);
    return; // 出错时返回void
  }
};
  1. 传递给Provider的value就能正常匹配类型了:
<AuthContext.Provider value={{ getAuthJWT }}>
  {children}
</AuthContext.Provider>

方案2:在Context中存储同步的JWT值

如果希望Context直接提供JWT数据(而非获取它的异步函数),可以在Provider组件中提前异步获取JWT,把结果存在状态里再传递:

  1. 调整Context类型:
interface AuthContextType {
  jwt: JWT | void;
  // 其他需要的属性...
}

const AuthContext = React.createContext<AuthContextType | undefined>(undefined);
  1. 在Provider中异步获取并存储JWT:
const AuthProvider = ({ children }: { children: React.ReactNode }) => {
  const [jwt, setJwt] = React.useState<JWT | void>(undefined);

  React.useEffect(() => {
    const fetchJWT = async () => {
      try {
        const res = await axios.get<JWT>('/api/auth/jwt');
        setJwt(res.data);
      } catch (err) {
        console.error('获取JWT失败:', err);
      }
    };
    fetchJWT();
  }, []);

  return (
    <AuthContext.Provider value={{ jwt }}>
      {children}
    </AuthContext.Provider>
  );
};

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.30 17:02:43