首页 > 解决方案 > 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?只要我TReturnIQuery编译器中使用就可以推断出类型:

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

解决方案


推荐阅读