Typescript函数返回承诺

Typescript函数返回承诺,typescript,Typescript,我很难理解如何设置函数的返回类型 问题是这个函数(api调用)可能返回一个对象数组[{},{},{}] 或具有某些属性的对象,而不是数组 { "count": 311, "next": "http://127.0.0.1:8000/....", "previous": "http://127.0.0.1:8000/...", "results": [{}, {}, {}] } 我拥有的是特定的API调用函数 async function fetchStuff(): Promis

我很难理解如何设置函数的返回类型

问题是这个函数(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' })
}
异步函数fetchStuff():Promise{ 返回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
    }
}
异步函数get(baseProperty:string):Promise{ 试一试{ const{data}=await Vue.$axios.get(baseProperty) 返回数据 }捕捉(错误){ 控制台错误(err) 失误 } } 我创建的接口如下所示

export interface IApiResponse<T> {
    count: number
    next: string
    previous: string
    results: T
}
导出接口IApiResponse{
计数:数字
下一个:字符串
上一个:字符串
结果:T
}
问题是,正如我所说的,并非所有api调用都会返回相同的内容,如何在我的
get
方法中允许不同的返回类型?

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

async function get<T>(baseProperty: string): Promise<IApiResponse<T>>
异步函数get(baseProperty:string):Promise 您可以将“获取”方法签名更改为:

async function get<T>(baseProperty: string): Promise<IApiResponse<T>>
异步函数get(baseProperty:string):Promise
Typescript已经为您介绍了

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

type ActualApiResponse<T> = IApiResponse<T> | T
type actualapireresponse=IApiResponse | T
并按如下方式使用:

async function fetchStuff(): Promise<ActualApiResponse<IStuff[]>> {
    // ...
}
异步函数fetchStuff():Promise{ // ... } 或者简单地采取更直接的方法:

async function fetchStuff(): Promise<IApiResponse<IStuff[]> | IStuff[]> {
    // ...
}
异步函数fetchStuff():Promise{ // ... }
Typescript已经为您介绍了

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

type ActualApiResponse<T> = IApiResponse<T> | T
type actualapireresponse=IApiResponse | T
并按如下方式使用:

async function fetchStuff(): Promise<ActualApiResponse<IStuff[]>> {
    // ...
}
异步函数fetchStuff():Promise{ // ... } 或者简单地采取更直接的方法:

async function fetchStuff(): Promise<IApiResponse<IStuff[]> | IStuff[]> {
    // ...
}
异步函数fetchStuff():Promise{ // ... }
这仍然不能解决我的问题,因为get仍然返回不正确的
承诺,因为它可能只是
承诺
承诺
在这种情况下仍然不能解决我的问题,因为get仍然返回不正确的
承诺
,因为它可能只是一个
Promise
Promise
在这种情况下,我认为Typescript已经用“联合类型”覆盖了您。声明
键入actualapireresponse=IApiResponse | T
并返回它?使用
actualapireresponse
作为返回类型意味着返回类型可以是
IApiResponse
T
,谢谢!很乐意帮忙。我贴出了一个答案,现在我们已经追根究底了。我想Typescript已经用“联合类型”覆盖了你。声明
键入actualapireresponse=IApiResponse | T
并返回它?使用
actualapireresponse
作为返回类型意味着返回类型可以是
IApiResponse
T
,谢谢!很乐意帮忙。我发布了一个答案,现在我们已经追根究底了。