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

React-Redux+TypeScript遇TS2339错误:如何获取result.data.message.AT?

解决React-Redux Query + TypeScript中的TS2339错误:Property 'message' does not exist on type '{}'

问题根源是你定义baseQueryWithReauth时,BaseQueryFn的第二个泛型参数设为了unknown,TypeScript无法推断result.data的具体结构,因此访问message属性时触发类型错误。以下是几种可行的解决办法:

方案1:定义响应类型并全局指定

先给后端返回的成功数据定义明确的TypeScript类型:

// 匹配后端返回的结构
interface ApiSuccessResponse {
  success: boolean;
  message: {
    AT: string;
  };
}

然后修改BaseQueryFn的泛型,把原本的unknown替换成我们定义的类型:

const baseQueryWithReauth: BaseQueryFn<
  string | FetchArgs,
  ApiSuccessResponse, // 替换这里的unknown
  FetchBaseQueryError
> = async (args, api, extraOptions) => {
  const result = await baseQuery(args, api, extraOptions);
  // 现在TS能正确识别data的结构,不会再报错
  console.log(result?.data?.message.AT);
  return result;
};

方案2:临时用类型断言

如果只是单个地方需要访问,不想修改全局泛型,可以用类型断言临时指定:

console.log((result?.data as ApiSuccessResponse)?.message.AT);

注意:这种方式要确保当前请求的返回结构确实符合ApiSuccessResponse,否则可能出现运行时错误。

方案3:用类型守卫做安全检查

如果后端可能返回不同结构的响应,建议加个类型守卫做安全校验:

// 定义类型守卫函数
function isApiSuccessResponse(data: unknown): data is ApiSuccessResponse {
  return (
    typeof data === 'object' &&
    data !== null &&
    'success' in data &&
    typeof (data as { success: unknown }).success === 'boolean' &&
    'message' in data &&
    typeof (data as { message: unknown }).message === 'object' &&
    (data as { message: unknown }).message !== null &&
    'AT' in (data as { message: unknown }).message
  );
}

// 使用时先校验类型
if (result?.data && isApiSuccessResponse(result.data)) {
  console.log(result.data.message.AT);
}

内容的提问来源于stack exchange,提问作者yashpal 9rx

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.30 15:46:11