我正在尝试T3
在下面的示例中正确推断出的类型,但仅显示为unknown
。我无法理解T2
在调用时如何正确推断基本类型Testing.testIt
,但无法理解它扩展的类的类型参数(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);
您将需要定义一个帮助程序来提取类型:
type ExtractGenericClassType<T> = T extends GenericClass<infer TInner> ? TInner : never;
class Testing {
static testIt<T extends GenericClass<any>>(testClass: Type<T>): ExtractGenericClassType<T> {
...
}
}
此外,您需要确保您的泛型类实际上使用了泛型类型参数,否则将无法正常工作。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句