我正在尝试构建一个apiService,该APIService提供的返回方法和参数类型取决于指定的路由。我的方法如下:
enum Routes {
task = "task",
category = "category"
}
type GetReturnTypes = {
task: Task[],
category: Category[]
}
type PostPayloadTypes = {
task: TaskPrototype,
category: CategoryPrototype
}
type PostReturnTypes = {
task: Task,
category: Category
}
type ApiServiceType = {
get<P extends Routes>(route: P , id?:number):Promise<P extends Routes ? GetReturnTypes[P] : never>
post<P extends Routes>(route: P, params: PostPayloadTypes[P]):Promise<PostReturnTypes[P]>
}
export const apiService:ApiServiceType = {
get: (route, id) => {
switch (route){
case Routes.task:
return /* returns Task */
case Routes.category:
return /* return Category */
default :
throw new Error("invalid Route!")
};
}
//...
}
当我使用apiService时,我得到的正是预期的自动完成功能。但是对于get方法,我得到了以下编译器错误:
键入'(route:P,id:number | undefined)=> Promise <任务[]> |不能将Promise
'分配为类型'(route:P,id ?: number | undefined)=> Promise '。 键入'Promise <任务[]> |不能将Promise '分配给类型'Promise '。 类型“ Promise <任务[]>”不可分配给类型“ Promise ”。 类型“ Task []”不可分配给类型“ GetReturnTypes [P]”。 无法将类型“任务[]”分配给类型“任务[]和类别[]”。 类型“ Task []”不可分配给类型“ Category []”。 “任务”类型缺少属性“颜色”,但在“类别”类型中为必需
我希望switch表达式允许打字稿将预期的大小写匹配到Types,但是不知何故。有人知道如何解决这个问题吗?
非常感谢:)!