Create new event with emitter object to simplify code
This commit is contained in:
@@ -14,11 +14,13 @@ export interface IEvent<T, U = void> {
|
||||
}
|
||||
|
||||
export interface IEventEmitter<T, U = void> {
|
||||
event: IEvent<T, U>;
|
||||
fire(arg1: T, arg2: U): void;
|
||||
dispose(): void;
|
||||
}
|
||||
|
||||
export interface IEventWithEmitter<T, U = void> extends IEventEmitter<T, U>, IEvent<T, U> {
|
||||
}
|
||||
|
||||
export class EventEmitter<T, U = void> implements IEventEmitter<T, U> {
|
||||
private _listeners: IListener<T, U>[] = [];
|
||||
private _event?: IEvent<T, U>;
|
||||
@@ -64,6 +66,18 @@ export class EventEmitter<T, U = void> implements IEventEmitter<T, U> {
|
||||
}
|
||||
}
|
||||
|
||||
export function initEvent<T, U = void>(): IEventWithEmitter<T, U> {
|
||||
const emitter = new EventEmitter<T, U>();
|
||||
const event = emitter.event;
|
||||
Object.defineProperty(event, 'fire', {
|
||||
value: emitter.fire.bind(emitter)
|
||||
});
|
||||
Object.defineProperty(event, 'dispose', {
|
||||
value: emitter.dispose.bind(emitter)
|
||||
});
|
||||
return event as any;
|
||||
}
|
||||
|
||||
export function forwardEvent<T>(from: IEvent<T>, to: IEventEmitter<T>): IDisposable {
|
||||
return from(e => to.fire(e));
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user