declare type Id = T; declare type In = T extends (...args: infer U) => any ? U : []; declare type Out = T extends (...args: any[]) => infer U ? U : never; declare type Filter = { [K in U]: T[K] extends Cond ? K : never; }[U]; export declare type EventKey = Filter any> & string; export declare type EventIn> = Id>; export declare type EventOut> = Id | void>; /** An object that needs to be manually disposed of */ export interface Disposable { dispose(): void; } /** Extract the listener type for a specific event */ export declare type Listener = EventKey> = Id<(...args: EventIn) => EventOut>; /** An object of event keys and listener values */ export declare type ListenerMap = Partial<{ [K in EventKey]: Listener; }>; export {};