【发布时间】:2020-06-12 07:12:19
【问题描述】:
我想键入一个 api 响应,其中资源在资源名称键上返回,即{ [resourceName]: resources, total: 10 }。在以下示例中,我将如何键入响应对象来表示响应中存在apples 或oranges,具体取决于请求的内容:
interface Response {
total: number
apples: Array<object>
oranges: Array<object>
}
const get = async (fruit: 'apples' | 'oranges') => {
const data: Response = await fetchFruit(`https://example.com/${fruit}`)
const count = data.total
const applesOrOranges = data[fruit].filter(Boolean)
}
我认为我必须为不同的可能响应使用联合类型,但我不清楚如何根据传递给函数的字符串文字来缩小联合类型:
interface Response {
total: number
}
interface ApplesResponse extends Response {
apples: Array<object>
}
interface OrangesResponse extends Response {
oranges: Array<object>
}
type FruitResponse = ApplesResponse | OrangesResponse
const get = async (fruit: 'apples' | 'oranges') => {
const data: FruitResponse = await fetchFruit(`https://example.com/${fruit}`)
const count = data.total
const applesOrOranges = data[fruit].filter(Boolean)
}
【问题讨论】:
标签: typescript