Typescript函数返回承诺

时间:2019-02-20 11:32:14

标签: typescript

我很难理解如何在函数上设置返回类型。

问题是此函数(api调用)可能返回对象数组[{}, {}, {}]

或具有某些属性的对象,而不是数组。

{
  "count": 311,
  "next": "http://127.0.0.1:8000/....",
  "previous": "http://127.0.0.1:8000/...",
  "results": [{}, {}, {}]
}

我拥有的是特定的API调用功能

async function fetchStuff(): Promise<IApiResponse<IStuff[]>> {
    return get({ baseProperty: 'stuff' })
}

哪个调用了我创建的常规“ get”方法

async function get(baseProperty: string): Promise<IApiResponse<any>> {
    try {
        const { data } = await Vue.$axios.get(baseProperty)
        return data
    } catch (err) {
        console.error(err)
        throw err
    }
}

我创建的界面是这个

export interface IApiResponse<T> {
    count: number
    next: string
    previous: string
    results: T
}

问题是,正如我说的那样,不是所有的api调用都将返回相同的东西,我该如何在我的get方法中允许不同的返回类型?

2 个答案:

答案 0 :(得分:2)

您可以将“获取”方法签名更改为:

async function get<T>(baseProperty: string): Promise<IApiResponse<T>>

答案 1 :(得分:1)

打字稿已涵盖union types

您可以选择声明新的联合类型

type ActualApiResponse<T> = IApiResponse<T> | T

并按以下方式使用它:

async function fetchStuff(): Promise<ActualApiResponse<IStuff[]>> {
    // ...
}

或直接采用以下更直接的方法:

async function fetchStuff(): Promise<IApiResponse<IStuff[]> | IStuff[]> {
    // ...
}