[英]TypeScript: Polymorphic this and inferring generic function parameter
[英]Inferring generic type parameter based on another generic parameter in TypeScript
是的,对于这个问题的标题很抱歉,但是很难解释。 显示一些代码要简单得多,并问为什么这不符合我的预期? :
interface Doer<U> {
doStuff: () => U;
}
class Promiser implements Doer<Promise<string>> {
doStuff() {
return Promise.resolve('foo');
}
}
export interface Type<T> extends Function {
new (...args: any[]): T;
}
function doYourThing<T extends Doer<U>, U>(doer: Type<T>): U {
return new doer().doStuff();
}
const result = doYourThing(Promiser);
// type of "result" is `{}`
// I want it to be `Promise<string>`
我什至不确定这是否可行,但我希望TypeScript能够基于参数为Doer<U>
类型且实际参数为类型的事实来推断doYourThing()
的返回类型。 Doer<Promise<string>>
我什至尝试过(我现在正在使用TypeScript 2.4.2)吗?
如果是这样,我在这里做错了什么?
不幸的是,像这样的统一类型的统一无法立即使用。 在“轻量级更高种类的类型”( 此处为 TypeScript示例)中概述的HKT的“扁平化”编码略显笨拙,您可以从中更好地进行推断。
幸运的是,有一个更简单的方法来重新安排事情:
...
function doYourThing<T>(doer: Type<Doer<T>>): T {
return new doer().doStuff();
}
const result = doYourThing(Promiser);
// result is `Promise<string>`
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.