typescript - 类定义的双重断言
问题描述
我有以下界面
export interface DefElement<G> {
id: string;
element: G;
}
export interface DefEvent<T> {
type: T;
value: any;
}
我希望能够设置属性的类型type
和element
.
所以就像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
解决方案
不是 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>>();
}
或者您可以拥有必须实现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}>()
推荐阅读
- python - 如何在 Python 3 中删除字符串中的特殊字符?
- c++ - 从标准输入读取时子进程挂起(fork/dup2 竞争条件)?
- javascript - Redux-Saga 以某种方式在不经过 saga 的情况下更新 reducer
- sql - 创建一个 NZPLSQL 以查找作为键的一组字段的 min(date) 和 max(date)
- orbeon - 热创建orbeon docker容器?
- python - 来自透明的python matplotlib热图颜色条
- ms-access - Access VBA - 重命名文件名称中的句点
- tableau-api - 如何为每个度量分配一个单独的标记样式?
- c++ - c++中数组的未定义错误?
- ios - SceneKit - 渲染节点始终具有相同的屏幕空间大小