import { RequiredKeys, OptionalKeys, PickByValue, OmitByValue } from 'utility-types'; import { FunctionExt } from '../util'; export declare class Events { private listeners; on>(name: Name, handler: Events.Handler, context?: any): this; on>(name: Name, handler: Events.Handler, context?: any): this; once>(name: Name, handler: Events.Handler, context?: any): this; once>(name: Name, handler: Events.Handler, context?: any): this; off(): this; off(name: null, handler: Events.Handler): this; off(name: null, handler: null, context: any): this; off>(name: Name, handler?: Events.Handler, context?: any): this; off>(name: Name, handler?: Events.Handler, context?: any): this; trigger>(name: Name): FunctionExt.AsyncBoolean; trigger>(name: Name, args: EventArgs[Name]): FunctionExt.AsyncBoolean; trigger>(name: Name, ...args: EventArgs[Name]): FunctionExt.AsyncBoolean; trigger>(name: Name, args?: EventArgs[Name]): FunctionExt.AsyncBoolean; trigger>(name: Name, ...args: EventArgs[Name]): FunctionExt.AsyncBoolean; trigger>(name: Name, ...args: any[]): FunctionExt.AsyncBoolean; /** * Triggers event with specified event name. Unknown names * will cause a typescript type error. */ protected emit>(name: Name): FunctionExt.AsyncBoolean; protected emit>(name: Name, args: EventArgs[Name]): FunctionExt.AsyncBoolean; protected emit>(name: Name, ...args: EventArgs[Name]): FunctionExt.AsyncBoolean; protected emit>(name: Name, args?: EventArgs[Name]): FunctionExt.AsyncBoolean; protected emit>(name: Name, ...args: EventArgs[Name]): FunctionExt.AsyncBoolean; } export declare namespace Events { type Handler = Args extends null | undefined ? () => any : Args extends any[] ? (...args: Args) => any : (args: Args) => any; type EventArgs = { [key: string]: any; }; type EventNames = Extract; /** * Get union type of keys from `M` that value matching `any[]`. */ type NamesWithArrayArgs = RequiredKeys>; type NotArrayValueMap = OmitByValue; type OptionalNormalNames = OptionalKeys>; type RequiredNormalNames = RequiredKeys>; type OtherNames = EventNames>; type UnknownNames = Exclude>; }