在不使用泛型類型的情況下推斷 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 遊樂場