【问题标题】:Axios, Typescript, and PromisesAxios、Typescript 和 Promise
【发布时间】: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

【问题讨论】:

    标签: typescript vue.js axios


    【解决方案1】:

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

    例如:

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

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

    【讨论】:

    • 太完美了,非常感谢。老实说,我什至没有想过需要在 TS 中设置返回类型,而是考虑在动作中转换返回类型,但这显然要好得多。再次感谢!
    猜你喜欢
    • 1970-01-01
    • 2021-12-10
    • 2018-04-29
    • 2016-12-29
    • 2016-09-09
    • 1970-01-01
    • 2020-03-21
    • 2016-12-27
    • 2021-11-24
    相关资源
    最近更新 更多