【发布时间】:2021-09-09 15:14:13
【问题描述】:
我创建了一个通用的错误处理程序包装函数,它在出现错误时处理错误并返回回调的结果。我的问题是打字稿不允许我返回承诺,因为
TS2322: Type 'Promise<unknown>' is not assignable to type 'R'.
'R' could be instantiated with an arbitrary type which could be unrelated to 'Promise<unknown>'
这是我的职责
export function withErrorHandler<R>(action: string, callback: () => R): R {
function isPromise<X>(promise: Promise<X> | unknown): promise is Promise<X> {
return promise instanceof Promise;
}
try {
const result = callback();
if (isPromise(result)) {
return result.catch(error => {
handleError(error, action);
throw error;
});
}
return result;
} catch (error) {
handleError(error, action);
throw error;
}
}
谁知道如何编写泛型来推断返回类型并允许它在回调返回 Promise 时返回 Promise 或返回非 Promise? 谢谢
【问题讨论】:
标签: typescript typescript-generics