我具有以下界面
export interface DefElement<G> {
id: string;
element: G;
}
export interface DefEvent<T> {
type: T;
value: any;
}
我希望能够设置属性type
和element
的类型。
就像DefElement<elementType>
一样,G将是ElementType
所以到目前为止,一切正常。
我想创建一个类,该类使用那些2接口和绑定类型。所以我希望能够进行以下呼叫
ServiceHandler<DefElement<ElementType>,DefEvent<EventType>>()
所以我做了以下
export class ServiceHandler<T,G> {
}
这样做有两个问题。
1)我不能保证G,T尊重接口DefElement和DefEvent
2)如果我让myVar:T;
然后让myVar.value
,它将表示类型T上没有类型
所以我尝试执行以下操作
export class ServiceHandler<DefElement<G>,DefEvent<T>> {
}
但是它说我不能做一个“双重通用”
我想使用后者,因为总会定义一些属性,但是如果不指定父接口,则会出现编译器错误“值不存在”
我的问题是我应该如何实现这个双重g
答案 0 :(得分:2)
目前尚不清楚您要做什么。您可以为ServiceHandler
使用两个类型参数,并可以将其用作其他类型的参数:
export interface DefElement<G> {
id: string;
element: G;
}
export interface DefEvent<T> {
type: T;
value: any;
}
export class ServiceHandler<G, T> {
mapOfelement: Map<string, Map<string, DefElement<G>>> = new Map<string, Map<string, DefElement<G>>>();
groupDispatchers: Map<string, DefEvent<T>> = new Map<string, DefEvent<T>>();
}
或者您可以具有必须实现DefElement
和DefEvent
接口的类型参数:
export interface DefElement<G> {
id: string;
element: G;
}
export interface DefEvent<T> {
type: T;
value: any;
}
export class ServiceHandler<G extends DefElement<any>, T extends DefEvent<any>> {
mapOfelement: Map<string, Map<string, G>> = new Map<string, Map<string, G>>();
groupDispatchers: Map<string, T> = new Map<string, T>();
}
let s = new ServiceHandler<{ id: string, element: number}, { type: 'A', value: any}>()