【发布时间】:2021-04-10 08:18:10
【问题描述】:
我正在尝试为返回 Promise 的函数键入通用装饰器/包装器函数。
我试过这段代码,但它在callFetch函数上返回Promise<unknown>,而我期望它返回Promise<{ param: string; userId: number }>,这是callAPI的返回类型。
const callAPI = (param: string, userId: number) => Promise.resolve({ param, userId });
function wrappedFunctions() {
const userId = 1;
// hypothetical refetch function
const refetch = () => {};
const wrapAction = <T extends (...args: any[]) => Promise<R>, R>(
callback: T,
): ((...args: Parameters<T>) => Promise<R>) => async (...args: Parameters<T>) => {
const response = await callback(...args);
refetch();
return response;
};
// returns Promise<unknown>
// expect Promise<{ param: string; userId: number }>
const callFetch = wrapAction((param: string) => callAPI(param, userId));
return {
callFetch,
};
}
这是codesandbox。
【问题讨论】:
标签: typescript function generics promise async-await