繁体   English   中英

typescript 继承 T 的通用 Function

[英]typescript Generic Function that inherit T

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

问题是返回值不会自动继承 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参数调用的 function 的类型。 您还可以捕获参数的类型和返回类型,以更好地键入结果 function。

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() 

游乐场链接

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

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