![](/img/trans.png)
[英]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.