首页 > 解决方案 > 类定义的双重断言

问题描述

我有以下界面

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

export interface DefEvent<T> {
  type: T;
  value: any;
}

我希望能够设置属性的类型typeelement.

所以就像DefElement<elementType>那时 G 将是ElementType

所以直到现在一切正常。

我想创建一个类,该类使用这两个接口和绑定类型。所以我希望能够进行以下调用

ServiceHandler<DefElement<ElementType>,DefEvent<EventType>>()

所以我做了以下

export class ServiceHandler<T,G> {
}

这样做有两个问题。

1) 我不能保证 G,T 尊重 DefElement 和 DefEvent 接口

2)如果我 let myVar:T;then myVar.value,它会说类型 T 上没有类型

所以我尝试执行以下操作

export class ServiceHandler<DefElement<G>,DefEvent<T>> {
}

但它说我不能做“双重通用”

我想用后者,因为总会定义一些属性,但是不指定父接口,会出现编译错误“值不存在”

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

标签: typescript

解决方案


不是 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>>();
}

或者您可以拥有必须实现DefElementDefEvent接口的类型参数:

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}>()

推荐阅读