我很难理解如何在函数上设置返回类型。
问题是此函数(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
方法中允许不同的返回类型?
答案 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[]> {
// ...
}