Axios、Typescript 和 Promise

Posted

技术标签:

【中文标题】Axios、Typescript 和 Promise【英文标题】:Axios, Typescript, and Promises 【发布时间】:2018-02-25 18:59:10 【问题描述】:

这可能更像是一个 TypeScript 问题。我有一个 REST 方法,它通过 Vue 操作在我的 http 库中调用。我希望 resolve() 方法返回类型化数组,但除非我在 action.ts“then”方法中进行转换,否则我会收到一个 '.length 在类型 中不存在'

由于已经在 http.ts 方法中完成,有什么方法不必将结果重新转换为我的类型化数组?

http.ts(部分)

getapps()         
        return new Promise((resolve, reject) => 
            this.axios.post('/account/getapps').then((response) => 
                resolve(response.data as DomainAppType[]);
            , (err) => 
                reject(err);
            );
         );
    

action.ts

import  DomainAppType  from '../models/domainApps';

var actions = 
    LOGIN: function ( commit , params) 
        http.getapps(params.email, params.password).then(apps => 
            var appList = <DomainAppType[]>apps;
            console.log(appList.length);
        ).catch((err) => 
            console.log(JSON.stringify(err));
        )

      

export default actions

【问题讨论】:

【参考方案1】:

你应该声明方法的返回类型。

例如:

getApps (): Promise<DomainAppType[]> 
    return new Promise((resolve, reject) => ...);

不幸的是,正在解析的内容没有被编译器作为预期的泛型类型。

【讨论】:

太完美了,非常感谢。老实说,我什至没有想过需要在 TS 中设置返回类型,而是考虑在动作中转换返回类型,但这显然要好得多。再次感谢!

以上是关于Axios、Typescript 和 Promise的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 Axios 和 Typescript 等待响应?

Axios 和 Typescript 给出一个类型的 promise 拒绝错误

React 和 Typescript,Axios 响应的类型都有哪些?

VueJs Axios 和 Typescript

使用 axios、TypeScript 模板和异步函数对 VueJS 进行单元测试

axios typescript 自定义 AxiosRequestConfig