網站搜尋

在不使用泛型類型的情況下推斷 Typescript 泛型類型


請考慮以下程式碼:

interface IQuery<TReturn = any> {}
export type ExtractGeneric<T> = T extends IQuery<infer R> ? R : never;
class MyQuery implements IQuery<string> {}
type extractedGenericType = ExtractGeneric<MyQuery>;

為什麼編譯器不夠聰明,無法知道 extractedGenericType 不是 string 類型?一旦我在 IQuery 中使用 TReturn,編譯器就可以推斷出類型:

interface IQuery<TReturn = any> {
    _type: TReturn;
}
export type ExtractGeneric<T> = T extends IQuery<infer R> ? R : never;
class MyQuery implements IQuery<string> {
    _type: string = "";
}
type extractedType = ExtractGeneric<MyQuery>;

不幸的是,在我的情況下,實際上在我的介面中使用這種類型並不是一個選項。有什麼解決方法嗎?

連結到 TypeScript 遊樂場