简体   繁体   English

Typescript 获取泛型函数的返回类型

[英]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>但目前fooPromise<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;
    }
}

Playground 操场

  • It looks easier to generize the return type rather than the function itself生成返回类型而不是 function 本身看起来更容易
  • You don't need to 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 10throw '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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM