@theintern/common
Version:
Common modules used by @theintern projects
26 lines (25 loc) • 1.14 kB
TypeScript
import { Handle } from './util';
export default class Evented<M extends CustomEventTypes = {}, T = EventType, O extends EventObject<T> = EventObject<T>> {
protected __typeMap__?: M;
protected listenersMap: Map<T | keyof M, EventedCallback<T, O>[]>;
private handles;
constructor();
emit<K extends keyof M>(event: M[K]): void;
emit(event: O): void;
on<K extends keyof M>(type: K, listener: EventedCallbackOrArray<K, M[K]>): Handle;
on(type: T, listener: EventedCallbackOrArray<T, O>): Handle;
own(handles: Handle | Handle[]): Handle;
destroy(): Promise<boolean>;
private _addListener;
}
export declare type EventedCallback<T = EventType, E extends EventObject<T> = EventObject<T>> = {
(event: E): boolean | void;
};
export interface CustomEventTypes<T extends EventObject<any> = EventObject<any>> {
[index: string]: T;
}
export declare type EventedCallbackOrArray<T = EventType, E extends EventObject<T> = EventObject<T>> = EventedCallback<T, E> | EventedCallback<T, E>[];
export declare type EventType = string | symbol;
export interface EventObject<T = EventType> {
readonly type: T;
}