Typescript 类定义的双重断言

Typescript 类定义的双重断言,typescript,Typescript,我有以下接口 export interface DefElement<G> { id: string; element: G; } export interface DefEvent<T> { type: T; value: any; } 所以我做了以下几点 export class ServiceHandler<T,G> { } export class ServiceHandler<DefElement<G>,Def

我有以下接口

export interface DefElement<G> {
  id: string;
  element: G;
}

export interface DefEvent<T> {
  type: T;
  value: any;
}
所以我做了以下几点

export class ServiceHandler<T,G> {
}
export class ServiceHandler<DefElement<G>,DefEvent<T>> {
}
但它说我不能做“双重通用”

我想使用后者,因为总会定义某些属性,但如果不指定父接口,则会出现编译器错误“value不存在”


我的问题是如何实现这个双g

您想要做什么还不是100%清楚。对于
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>>();
}

@博比:从我读到你的澄清,你在寻找我答案中的第二个选项。您需要两个类型参数,它们被约束以实现接口
G扩展defement
将意味着
G
必须实现
defement
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>>();
}
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}>()