我偶然发现了一个特殊的问题,我不知道如何解决这个问题.我有一个具有泛型类型的类.此类包含一个方法,该方法只有一个联合参数请求泛型类型或对象.因为这个类使用不同的类型被多次实例化,所以我想创建一个泛型方法来检索其中一个实例(泛型类型),并在其中调用该方法.
这里有一个复制代码:
export interface A {
a: any;
}
export interface B {
b: any;
}
export interface MyClasses {
a: MyClass<A>;
b: MyClass<B>;
}
export interface C {
c: any;
}
export declare class MyClass<T = { [prop: string]: any }> {
myMethod(data: T | C): T;
}
export type MyClassesKeys = keyof MyClasses;
export type MyClassInferGenericType<T> = T extends MyClass<infer G> ? G : T;
export class MyService {
private myClasses: MyClasses = {
a: new MyClass<A>(),
b: new MyClass<B>()
};
public getMyClass<T extends MyClassesKeys>(keyName: T): MyClasses[T] {
return this.myClasses[keyName];
}
public callerMethod<T extends MyClassesKeys, U extends MyClassInferGenericType<MyClasses[T]>>(key: T, myData: U) {
// This part is usually retrieved gener
const myClassInstance = this.getMyClass(key);
// My call
myClassInstance.myMethod(myData);
}
}
这会以某种方式返回一个编译错误:
Argument of type 'A | B' is not assignable to parameter of type '(A | C) & (B | C)'.
Type 'A' is not assignable to type '(A | C) & (B | C)'.
Type 'A' is not assignable to type 'A & C'.
Property 'c' is missing in type 'A' but required in type 'C'.
由于"myClassInstance"属于MyClasss[T]类型,并且mydata采用与MyClasss[T]相关联的泛型类型,所以一切都应该被正确地推断出来.
So, why is typescript trying to do an intersection of my types?个