/**
 * An events map is an interface that maps event names to their value, which
 * represents the type of the `on` listener.
 */ export interface EventsMap { [ event ] : any ; } /**
 * The default events map, used if no EventsMap is given. Using this EventsMap
 * is equivalent to accepting all event names, and any data.
 */ export interface DefaultEventsMap { [ event ] : ( ... args : any [ ] ) => void ; } /**
 * Returns a union type containing all the keys of an event map.
 */ export type EventNames < Map extends EventsMap > = keyof Map & ( string | symbol ) ; /** The tuple type representing the parameters of an event listener */ export type EventParams < Map extends EventsMap , Ev extends EventNames < Map > > = Parameters < Map [ Ev ] > ; /**
 * Interface for classes that aren't `EventEmitter`s, but still expose a
 * strictly typed `emit` method.
 */ export interface TypedEventBroadcaster < EmitEvents extends EventsMap > { emit < Ev extends EventNames < EmitEvents > > ( ev , ... args ) : boolean ; }