如何为来自 axios.get 的响应使用类型

Posted

技术标签:

【中文标题】如何为来自 axios.get 的响应使用类型【英文标题】:how to use a type for the response from axios.get 【发布时间】:2019-12-28 22:41:14 【问题描述】:

我有一个通过 Axios 获取数据的简单代码:

const response= await axios.get("blabla");

现在我正在尝试使用打字稿。

当我将类型添加到 get 方法时,它会起作用:

const response= await axios.get<Todo[]>("blabla");

但我需要的是这样的:

const response:Todo[] = await axios.get("blabla");

但如果我这样做,我会在response.data 上收到错误消息:类型“Todo[]”上不存在属性“数据”

所以 2 个问题: 1)为什么第一种方法没有发生? 2)第二种方式怎么做?

【问题讨论】:

response 不是Todo[] 类型。改为这样做:const response: Todo[] = (await axios.get(...)).data @dziraf 照你说的做了,但还是有同样的问题 您确定 BE 返回的正是Todo 的列表吗? 是的,我 100% 确定 @rickdenhaan 您能否发布一个包含代码的完整答案?确实感谢您的帮助 【参考方案1】:

axios.get() 返回一个AxiosResponse&lt;any&gt; 对象,其中response.dataany

axios.get&lt;Todo[]&gt;() 返回一个AxiosResponse&lt;Todo[]&gt; 对象,其中response.dataTodo[]

所以你可以输入response

const response: AxiosResponse<Todo[]> = await axios.get("blabla");

【讨论】:

response.page, response.status 呢?不会以这种方式输入。我只是这样工作的:http.get&lt;Breweries[], responseData&lt;Breweries[]&gt;&gt;('/breweries') 但看起来太冗长了。 @AlexanderKim 你在使用 Axios 吗?一个 Axios 响应对象 does not have 一个 .page 属性。 是的,确实,对不起,我在 nuxt 插件中使用 axios:axios.nuxtjs.org/usage/#-shortcuts,因此我很困惑。

以上是关于如何为来自 axios.get 的响应使用类型的主要内容,如果未能解决你的问题,请参考以下文章

如何使用来自 Axios GET 的 Vue 语法渲染 HTML 字符串?

如何为内容类型的响应正文提供示例值:Swagger 中的 text/html(使用 dredd 进行测试)

如何为 Fabric.js 启用响应式设计

如何为来自 SpringBoot 后端代码的嵌套 JSON 响应在 angular8(TypeScript) 或更高版本中定义模型类

IE 11问题-自动缓存来自GET请求的响应-Reactjs

如何使用 TypeScript 验证带有 Axios GET 响应的接口