[英]Typescript get generic function's return type
I want to get return type of fn
which is generic for my errorbound
function.我想获得
fn
的返回类型,这对于我的errorbound
是通用的。
I tried我试过了
type ErrorBound = <Fn extends Function>(Fn) => Promise<ReturnType<typeof Fn> | Error>;
export const errorBound: ErrorBound = async (fn) => {
try {
return await fn();
} catch (e) {
console.error("errorBound!!");
console.error({ e });
return e
}
};
I want it be like我希望它像
const foo = errorBound(() => 1) // foo is now Promise<number | Error>
But currently foo
is Promise<any>
但目前
foo
是Promise<any>
Try this:尝试这个:
const errorBound = <T>(fn: (...args: any[]) => T): T | Error => {
try {
return fn();
} catch(e) {
console.log({e})
if (!(e instanceof Error)) return new Error(`Not an Error: ${e}`);
return e;
}
}
return await somePromise
it's equivalent to return somePromise
return await somePromise
它相当于return somePromise
e
is not always an error, it's valid JS to throw 10
or throw 'not an Error object'
, so I added a check e
并不总是错误, throw 10
或throw 'not an Error object'
是有效的 JS,所以我添加了一个检查type F = <T>(fn: (...args: any[]) => T) => Promise<T | Error> const f: F = async (fn) => { return fn() } const ff = () => Math.random() const n = f(ff) // Promise<number | Error>
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.