继承 T 的打字稿泛型函数

typescript Generic Function that inherit T

我要尝试向 Function 添加一个方法。

问题是 return 值不会自动继承 T。

interface Function {
  Promise <T> (...args: any[]): Promise<T> ;
}

Function.prototype.Promise = async function <T> (this: Function , ...args: any[]): Promise <T> {
  return new Promise <T> ((resolve, reject) => {
    this(args).then((x: T) => resolve(x)).catch((e: any) => reject(e));
  });
}

  var test =(async()=> {
      return "";
  });
  // this return Promise<unknown> it should return Promise<string>
  test.Promise() 
  
  
  
  // this should work, but I want the above to work instead 
  // it should inherit the type automaticly
   test.Promise<string>() 

您可以捕获使用 this 参数调用的函数的类型。您还可以捕获参数的类型和 return 类型以更好地输入结果函数。

interface Function {
  Promise<TReturn, TArgs extends any[]>(this: (...a: TArgs) => Promise<TReturn>, ...a: TArgs): Promise<TReturn>;
}

Function.prototype.Promise = async function <TReturn, TArgs extends any[]>(this: (...a: TArgs) => Promise<TReturn>, ...args: TArgs): Promise<TReturn> {
  return new Promise<TReturn>((resolve, reject) => {
    this(...args).then((x: TReturn) => resolve(x)).catch((e: any) => reject(e));
  });
}

var test = (async () => {
  return "";
});
// this return Promise<unknown> it should return Promise<string>
test.Promise() 

Playground Link