簡體   English   中英

Typescript 獲取泛型函數的返回類型

[英]Typescript get generic function's return type

我想獲得fn的返回類型,這對於我的errorbound是通用的。

我試過了


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

 }
};

我希望它像

const foo = errorBound(() => 1) // foo is now Promise<number | Error>

但目前fooPromise<any>

嘗試這個:

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;
    }
}

操場

  • 生成返回類型而不是 function 本身看起來更容易
  • 你不需要return await somePromise它相當於return somePromise
  • 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