我正在try 创建严格类型的函数来调用我的API.我的 idea 是创建包含所有所需数据的文字,如下所示:
type ApiRoutes = {
'/user': {
POST: {
payload: { mydata: number }
response: UserData
}
DELETE: {
payload: string
response: UserData
}
GET: {
payload: string
response: UserData
}
}
}
在我的函数中使用它:
const apicall = async <
E extends keyof ApiRoutes,
T extends keyof ApiRoutes[E],
P extends ApiRoutes[E][T]['payload]
>(
endpoint: E,
method: T,
payload: P
):Promise<R extends ApiRoutes[E][T]['response> => {
//do stuff
}
然后这样称呼它:
apicall('/user', 'POST', {mydata: 5})
apicall('/user', 'DELETE', 'my text')
我的问题是我弄错了
类型‘"PayLoad""不能用于索引类型’ApiRoutes[E][T]‘
但当我拨打apiCall
时,我得到了正确的自动补全功能.你知道我需要改变什么吗?我有一个 idea ,推断关键字可能会有某种帮助,但我还没有玩它,所以我不知道如何接近它.