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

TypeScript报错:类型'Promise<any>'不存在属性'data'的解决方法

解决TypeScript中async函数Promise类型错误问题

错误原因

你把res声明为Promise<any>是核心问题——await的作用就是解包Promise,拿到的是Promise内部resolve的实际响应对象,而非Promise本身。给res指定Promise<any>类型相当于告诉TS:这个值是个Promise对象,自然会报data属性不存在的错误。

解决步骤

1. 定义自定义类型

先明确你的数据结构,定义对应的TypeScript接口:

// 先定义业务数据Item的类型(根据实际字段补充)
interface Item {
  id: number;
  title: string;
  // 其他业务字段...
}

// 定义请求返回的响应对象类型(匹配控制台输出的结构)
interface ActivityApiResponse {
  data: Item[];
  // 如果接口还有code、message等字段,也一并声明
  // code?: number;
  // message?: string;
}

2. 修正async函数的类型声明

给请求的Promise指定自定义类型,同时修正res的类型为实际响应对象:

// 假设你用axios发起请求,直接给请求方法指定响应类型
async function getActivityLists(): Promise<Item[]> {
  // 给axios请求指定ActivityApiResponse类型,await后res就是该类型的对象
  const res = await axios.get<ActivityApiResponse>('/api/activity-lists');
  
  // 如果你是自己封装的请求函数,要让它返回Promise<ActivityApiResponse>
  // const res: ActivityApiResponse = await yourCustomRequestFn();
  
  return res.data; // 此时res.data会被TS识别为Item[]类型
}

错误代码示例对比

之前的错误写法(问题根源):

async function getActivityLists() {
  // 错误:await后得到的是实际响应对象,不是Promise
  const res: Promise<any> = await yourRequestFunction();
  console.log(res.data); // TS报错:Promise类型没有data属性
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.14 09:20:34