UNPKG

@theintern/common

Version:

Common modules used by @theintern projects

26 lines (25 loc) 1.14 kB
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; }