export type Callback = (...args: any[]) => any; export interface IEventSystem { context: any; events: IEvents; on(name: K, callback: T[K], context?: any): any; detach(name: E, context?: any): any; clear(): void; fire(name: K, args?: ArgumentTypes): boolean; } interface IEvent { callback: Callback; context: any; } interface IEvents { [key: string]: IEvent[]; } interface IEventHandlersMap { [key: string]: Callback; } type ArgumentTypes any> = F extends (...args: infer A) => any ? A : never; export declare class EventSystem implements IEventSystem { events: IEvents; context: any; constructor(context?: any); on(name: K, callback: T[K], context?: any): void; detach(name: E, context?: any): void; fire(name: K, args: ArgumentTypes): boolean; clear(): void; } export declare function EventsMixin(obj: any): void; export interface IEventFacade { attachEvent: any; callEvent: any; } export {};