9-27作业
来源:10-25 面试题——百度复杂面试题

且听风吟720
2022-02-26
老师好,最终结果我最后可以实现,但是对FoodModule里面两个方法各自的属性的抓取,好像有点问题,还麻烦老师帮忙看一下
// 面试题:用keyof和infer处理复杂泛型问题
interface Action<T = any> {
type: string;
payload?: T;
}
class FoodModule {
public static topic: string;
public count!: number;
delay(promise: Promise<number>) {
return promise.then((second: number) => ({
type: "delay",
payload: `延迟${second}秒`
}))
}
searchFoodByCity(action: Action<string>) {
return {
payload: action.payload,
type: "searchFoodByCity"
}
}
}
// 要求1:实现方法名称
type AsyncMethodConnect<T, U> = (input: Promise<T>) => Promise<Action<U>>;
type SyncMethodConnect<T, U> = (action: Action<T>) => Action<U>;
// 要求2:把两个类型和原先的类合并成一个对象
// 所有方法名
type FoodModuleFuncKeys = Exclude<keyof FoodModule, "count">;
// 对比指定类型获取
type AsyncAndSyncFunc<T> =
T extends AsyncMethodConnect<infer P, infer U> ? AsyncMethodConnect<P, U> :
T extends SyncMethodConnect<infer P, infer U> ? SyncMethodConnect<P, U> : any;
// 综合输出结果
type Convert = {
[P in FoodModuleFuncKeys]: AsyncAndSyncFunc<FoodModule[P]>
}
// TODO: 问题在这儿:分别抓两个方法的类型
type AsyncFunc<T> = T extends AsyncMethodConnect<infer P, infer U> ? AsyncMethodConnect<P, U> : any;
type SyncFunc<T> = T extends SyncMethodConnect<infer P, infer U> ? SyncMethodConnect<P, U> : any;
type FoodModuleDelay = AsyncFunc<FoodModule["delay"]>;
type FoodModuleSearch = SyncFunc<FoodModule["searchFoodByCity"]>;
写回答
1回答
-
keviny79
2022-02-27
且听风吟720:这是作业,保证其他同学还有思考的空间,我就把解答的通过群转过去
022022-07-09
相似问题