Axios,Typescript和Promises

Fee*_*ech 6 typescript vue.js axios

这可能更像是一个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);
            });
         });
    }
Run Code Online (Sandbox Code Playgroud)

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
Run Code Online (Sandbox Code Playgroud)

Sha*_*ard 5

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

例如:

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

不幸的是,编译器未将解决的问题作为预期的通用类型。