export interface Handler< E extends Record< string, (...args: Parameters) => ReturnType >, K extends keyof E > { event: K once: boolean handler: (...args: Parameters) => void } /** * The Event class is responsible to provide an API to subscribe new handlers, * and triggers them whenever is necessary */ declare class Event< E extends Record ReturnType> > { /** * An array that contains subscribed handler functions */ private handlers /** * A number that behaves as a counter and used as an id for new handlers */ private count constructor() /** * Triggers handler functions of a corresponding event * @param event - Event name * @param args - Event corresponding arguments * @public * @returns void */ trigger(event: K, ...args: Parameters): void /** * Subscribe new handler * @param event - Event name * @param handler - Handler function * @public * @returns number */ subscribe( event: K, handler: (...args: Parameters) => ReturnType ): number /** * Subscribe new handler which triggers only once * @param event - Event name * @param handler - Handler function * @public * @returns number */ subscribeOnce( event: K, handler: (...args: Parameters) => ReturnType ): number /** * Unsubscribe handler from handlers by id * @param id - Handler id * @public * @returns void */ unsubscribe(id: number): void } export default Event