TypeScript中如何为fetch请求返回的对象声明正确类型
问题原因
- 报错的核心原因是你没有等待
response.json()的异步执行完成,就直接访问了count属性:response.json()方法本身返回的是Promise<unknown>类型的Promise对象,你手动将它的类型声明为Promise<ResponseFormat>是没问题的,但Promise对象本身不存在count属性,只有当Promise resolve之后拿到的实际返回值才有该属性。
- 你的类型声明没有错误,是异步处理逻辑有疏漏。
修正后的代码
async getFromApi(){ // 首次请求获取总条数 const firstResponse = await fetch(this.sourcePath); // 加await获取Promise resolve后的实际返回数据,类型标注为ResponseFormat const firstResData: ResponseFormat = await firstResponse.json(); // 携带总条数作为limit参数发第二次请求,拉取全量数据 const fullDataResponse = await fetch(`${this.sourcePath}/?limit=${firstResData.count}`); const fullResData: ResponseFormat = await fullDataResponse.json(); // 后续处理全量数据的逻辑写在这里 }
优化建议
- 首次请求仅需要获取
count字段,不需要返回完整的列表数据,可以在首次请求的url后加?limit=1参数,减少接口返回的数据体积,提升请求速度:
const firstResponse = await fetch(`${this.sourcePath}/?limit=1`);
内容的提问来源于stack exchange,提问作者BobbyBorn2L8
相关产品推荐
相关产品推荐

