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
相关产品推荐
相关产品推荐

