在TypeScript中,如何在具有多个类型参数的方法中获得要推断的泛型类型参数?

在TypeScript中,如何在具有多个类型参数的方法中获得要推断的泛型类型参数?,typescript,typescript-generics,typescript3.0,Typescript,Typescript Generics,Typescript3.0,我试图在下面的示例中正确推断出T3的类型,但它只是显示为unknown。我无法理解它如何在调用Testing.testIt时正确地推断出基本类型T2,而不是它扩展的类的类型参数(T3)。这是你的电话号码。我试图弄清楚infer关键字在这里是否有用,但我看不出它如何适用于此 export interface Type<T> extends Function { new (...args: any[]): T; } class GenericClass<T> { }

我试图在下面的示例中正确推断出
T3
的类型,但它只是显示为
unknown
。我无法理解它如何在调用
Testing.testIt
时正确地推断出基本类型
T2
,而不是它扩展的类的类型参数(
T3
)。这是你的电话号码。我试图弄清楚
infer
关键字在这里是否有用,但我看不出它如何适用于此

export interface Type<T> extends Function {
    new (...args: any[]): T;
}

class GenericClass<T> {
}

class ChildClass extends GenericClass<string> {

}

class Testing {
    static testIt<T3, T2 extends GenericClass<T3>>(testClass: Type<T2>): T3 {
      console.log('testIt called');
      return '' as any;
    }

    static testIt2(val: string): void {
      console.log(val);
    }
}

const result = Testing.testIt(ChildClass);
Testing.testIt2(result);
导出接口类型扩展函数{
新(…args:any[]):T;
}
类泛型类{
}
类ChildClass扩展了GenericClass{
}
类测试{
静态testIt(testClass:Type):T3{
log('testIt called');
将“”返回为任意值;
}
静态测试2(val:string):无效{
控制台日志(val);
}
}
常量结果=Testing.testIt(ChildClass);
测试。测试2(结果);

您需要定义一个帮助器来提取类型:

type ExtractGenericClassType<T> = T extends GenericClass<infer TInner> ? TInner : never;

class Testing {
    static testIt<T extends GenericClass<any>>(testClass: Type<T>): ExtractGenericClassType<T> {
      ...
    }
}
type ExtractGenericClassType=T扩展了GenericClass?锡纳:永远不会;
类测试{
静态测试(testClass:Type):ExtractGenericClassType{
...
}
}

此外,您需要确保泛型类实际使用泛型类型参数,否则这将不起作用。

好的,谢谢。我也尝试过类似的方法,但我只是不确定在
GenericClass
中为type参数放什么。现在来看,我想
any
是有道理的,但对我来说还是有点奇怪。“确保你的泛型类实际使用泛型类型参数”@jcalz谢谢,我想知道他们的文档中是否有这个参数,我只是不知道要搜索什么才能找到它。