diff --git a/eventemitter2.d.ts b/eventemitter2.d.ts index 230825bc353849ffbc46a886099558bed9d42113..19405bde859cf454333ed08d0a2a7543291e9258 100644 --- a/eventemitter2.d.ts +++ b/eventemitter2.d.ts @@ -1,27 +1,24 @@ -export type event = (symbol|string); -export type eventNS = string|event[]; - export interface ConstructorOptions { /** * @default false * @description set this to `true` to use wildcards. */ - wildcard?: boolean, + wildcard?: boolean /** * @default '.' * @description the delimiter used to segment namespaces. */ - delimiter?: string, + delimiter?: string /** * @default false * @description set this to `true` if you want to emit the newListener events. */ - newListener?: boolean, + newListener?: boolean /** * @default false * @description set this to `true` if you want to emit the removeListener events. */ - removeListener?: boolean, + removeListener?: boolean /** * @default 10 * @description the maximum amount of listeners that can be assigned to an event. @@ -38,39 +35,61 @@ export interface ConstructorOptions { */ ignoreErrors?: boolean } -export interface ListenerFn { - (...values: any[]): void; -} -export interface EventAndListener { - (event: string | string[], ...values: any[]): void; + +export type event = symbol | string +export type eventNS = string | event[] + +export type EventMap = Record void> + +export type ListenerFn< + EventName extends keyof Events = event, + Events extends EventMap = EventMap +> = Events[EventName] + +export interface EventAndListener< + EventName extends keyof Events = event, + Events extends EventMap = EventMap +> { + ( + event: EventName, + ...values: ListenerFunctionParameters + ): void } -export interface WaitForFilter { (...values: any[]): boolean } +export interface WaitForFilter< + EventName extends keyof Events = event, + Events extends EventMap = EventMap +> { + (...values: ListenerFunctionParameters): boolean +} -export interface WaitForOptions { +export interface WaitForOptions< + EventName extends keyof Events = event, + Events extends EventMap = EventMap +> { /** * @default 0 */ - timeout: number, + timeout: number /** * @default null */ - filter: WaitForFilter, + filter: WaitForFilter /** * @default false */ - handleError: boolean, + handleError: boolean /** * @default Promise */ - Promise: Function, + Promise: () => void /** * @default false */ overload: boolean } -export interface CancelablePromise extends Promise{ +export interface CancelablePromise extends Promise { cancel(reason: string): undefined } @@ -78,79 +97,236 @@ export interface OnceOptions { /** * @default 0 */ - timeout: number, + timeout: number /** * @default Promise */ - Promise: Function, + Promise: () => void /** * @default false */ overload: boolean } -export interface ListenToOptions { - on?: { (event: event | eventNS, handler: ListenerFn): void }, - off?: { (event: event | eventNS, handler: ListenerFn): void }, - reducers: Function | Object +export interface ListenToOptions< + EventName extends keyof Events = event, + Events extends EventMap = EventMap +> { + on?: { + (event: EventName | eventNS, handler: ListenerFn): void + } + off?: { + (event: EventName | eventNS, handler: ListenerFn): void + } + reducers: () => void | Record } -export interface GeneralEventEmitter{ - addEventListener(event: event, handler: ListenerFn): this, - removeEventListener(event: event, handler: ListenerFn): this, - addListener?(event: event, handler: ListenerFn): this, - removeListener?(event: event, handler: ListenerFn): this, - on?(event: event, handler: ListenerFn): this, - off?(event: event, handler: ListenerFn): this +export interface GeneralEventEmitter< + EventName extends keyof Events = event, + Events extends EventMap = EventMap +> { + addEventListener( + event: EventName, + handler: ListenerFn + ): this + + removeEventListener( + event: EventName, + handler: ListenerFn + ): this + + addListener?(event: EventName, handler: ListenerFn): this + + removeListener?( + event: EventName, + handler: ListenerFn + ): this + + on?(event: EventName, handler: ListenerFn): this + + off?(event: EventName, handler: ListenerFn): this } export interface OnOptions { - async?: boolean, - promisify?: boolean, - nextTick?: boolean, + async?: boolean + promisify?: boolean + nextTick?: boolean objectify?: boolean } -export interface Listener { - emitter: EventEmitter2; - event: event|eventNS; - listener: ListenerFn; - off(): this; +export interface Listener< + EventName extends keyof Events = event, + Events extends EventMap = EventMap +> { + emitter: EventEmitter2 + event: EventName | eventNS + listener: ListenerFn + + off(): this } -export declare class EventEmitter2 { +export type ListenerFunctionParameters< + EventName extends keyof Events = event, + Events extends EventMap = EventMap +> = Parameters + +export class EventEmitter2 { constructor(options?: ConstructorOptions) - emit(event: event | eventNS, ...values: any[]): boolean; - emitAsync(event: event | eventNS, ...values: any[]): Promise; - addListener(event: event | eventNS, listener: ListenerFn): this|Listener; - on(event: event | eventNS, listener: ListenerFn, options?: boolean|OnOptions): this|Listener; - prependListener(event: event | eventNS, listener: ListenerFn, options?: boolean|OnOptions): this|Listener; - once(event: event | eventNS, listener: ListenerFn, options?: true|OnOptions): this|Listener; - prependOnceListener(event: event | eventNS, listener: ListenerFn, options?: boolean|OnOptions): this|Listener; - many(event: event | eventNS, timesToListen: number, listener: ListenerFn, options?: boolean|OnOptions): this|Listener; - prependMany(event: event | eventNS, timesToListen: number, listener: ListenerFn, options?: boolean|OnOptions): this|Listener; - onAny(listener: EventAndListener): this; - prependAny(listener: EventAndListener): this; - offAny(listener: ListenerFn): this; - removeListener(event: event | eventNS, listener: ListenerFn): this; - off(event: event | eventNS, listener: ListenerFn): this; - removeAllListeners(event?: event | eventNS): this; - setMaxListeners(n: number): void; - getMaxListeners(): number; - eventNames(nsAsArray?: boolean): (event|eventNS)[]; - listenerCount(event?: event | eventNS): number - listeners(event?: event | eventNS): ListenerFn[] - listenersAny(): ListenerFn[] - waitFor(event: event | eventNS, timeout?: number): CancelablePromise - waitFor(event: event | eventNS, filter?: WaitForFilter): CancelablePromise - waitFor(event: event | eventNS, options?: WaitForOptions): CancelablePromise - listenTo(target: GeneralEventEmitter, events: event | eventNS, options?: ListenToOptions): this; - listenTo(target: GeneralEventEmitter, events: event[], options?: ListenToOptions): this; - listenTo(target: GeneralEventEmitter, events: Object, options?: ListenToOptions): this; - stopListeningTo(target?: GeneralEventEmitter, event?: event | eventNS): Boolean; - hasListeners(event?: String): Boolean - static once(emitter: EventEmitter2, event: event | eventNS, options?: OnceOptions): CancelablePromise; - static defaultMaxListeners: number; + + emit( + event: EventName, + ...values: ListenerFunctionParameters + ): boolean + + emit(event: eventNS, ...values: unknown[]): boolean + + emitAsync( + event: EventName | eventNS, + ...values: ListenerFunctionParameters + ): Promise>[]> + + addListener( + event: EventName | eventNS, + listener: ListenerFn + ): this | Listener + + on( + event: EventName, + listener: ListenerFn, + options?: boolean | OnOptions + ): this | Listener + + on( + event: eventNS, + listener: () => void, + options?: boolean | OnOptions + ): this | Listener + + prependListener( + event: EventName | eventNS, + listener: ListenerFn, + options?: boolean | OnOptions + ): this | Listener + + once( + event: EventName | eventNS, + listener: ListenerFn, + options?: true | OnOptions + ): this | Listener + + prependOnceListener( + event: EventName | eventNS, + listener: ListenerFn, + options?: boolean | OnOptions + ): this | Listener + + many( + event: EventName | eventNS, + timesToListen: number, + listener: ListenerFn, + options?: boolean | OnOptions + ): this | Listener + + prependMany( + event: EventName | eventNS, + timesToListen: number, + listener: ListenerFn, + options?: boolean | OnOptions + ): this | Listener + + onAny( + listener: EventAndListener + ): this + + prependAny( + listener: EventAndListener + ): this + + offAny( + listener: ListenerFn + ): this + + removeListener( + event: EventName | eventNS, + listener: ListenerFn + ): this + + off( + event: EventName | eventNS, + listener: ListenerFn + ): this + + removeAllListeners( + event?: EventName | eventNS + ): this + + setMaxListeners(numberOfListeners: number): void + + getMaxListeners(): number + + eventNames( + nsAsArray?: boolean + ): (EventName | eventNS)[] + + listenerCount( + event?: EventName | eventNS + ): number + + listeners( + event?: EventName | eventNS + ): ListenerFn[] + + listenersAny(): ListenerFn< + EventName, + Events + >[] + + waitFor( + event: EventName | eventNS, + timeout?: number + ): CancelablePromise> + waitFor( + event: EventName | eventNS, + filter?: WaitForFilter + ): CancelablePromise> + waitFor( + event: EventName | eventNS, + options?: WaitForOptions + ): CancelablePromise> + + listenTo( + target: GeneralEventEmitter, + events: EventName | eventNS, + options?: ListenToOptions + ): this + listenTo( + target: GeneralEventEmitter, + events: EventName[], + options?: ListenToOptions + ): this + listenTo( + target: GeneralEventEmitter, + events: Record, + options?: ListenToOptions + ): this + + stopListeningTo( + target?: GeneralEventEmitter, + event?: EventName | eventNS + ): boolean + + hasListeners(event?: EventName): boolean + + static once< + EventName extends keyof Events = event, + Events extends EventMap = EventMap + >( + emitter: EventEmitter2, + event: EventName | eventNS, + options?: OnceOptions + ): CancelablePromise> + + static defaultMaxListeners: number } export default EventEmitter2; \ No newline at end of file