我正在尝试做一些新的事情,但我有一个小问题:
我有以下=>
export interface SynchGroupSubject {
type: SynchGroupEvent;
target: any;
}
export enum SynchGroupEvent {
ADD_MAP,
REMOVE_MAP
}
在一项服务中,我有以下内容
public createNewSynchGroup(id?: string): Observable<SynchGroupSubject> {
const subject = new Subject<SynchGroupSubject>();
this.synchronizedGroupSubject.set(id, subject);
return subject.asObservable();
}
现在,有了这个我可以订阅和关注更新事件 =>
this.synchObs = this.mapSynchService.createNewSynchGroup(this.synchID);
this.synchObs.subscribe(event => this.synchEventHandler(event));
synchEventHandler(event: SynchGroupSubject) {
switch (event.type) {
case SynchGroupEvent.ADD_MAP:
//event.target is type any
break;
default:
break;
}
}
问题是,我想输入目标,以便在切换时,我知道我要处理什么。现在,目标类型是 any,但我想绑定与类型事件相关的类型。
简单的方法是制作多种类型,如下所示:
export interface ADD_MAP_TYPE {
type: SynchGroupEvent;
target: MyTypedTarger;
}
做
synchEventHandler(event: SynchGroupSubject) {
switch (event.type) {
case SynchGroupEvent.ADD_MAP:
event.target = event.target as ADD_MAP_TYPE;
break;
default:
break;
}
但我想要一些 SynchGroupEventType.ADD_MAP。
我考虑过使用命名空间,但它是矫枉过正。
另外,如果我想调度和事件
public dispatchSynchedEvent(id: string, type: SynchGroupEvent, value: any)
{
myElement.next({
type: type,
target: value,
})
}
到这里,我的值是any,我希望我能到以下
public dispatchSynchedEvent(id: string, type: SynchGroupEvent, value: any)
{
myElement.next({
type: type,
target: value as , // get the type of the value thx to the SynchGroupEvent type
})
}