/** * Thanks to Brian Terlson @bterlson * @author Brian Terlson @bterlson * @see https://github.com/bterlson/strict-event-emitter-types */ export declare type MatchingKeys = K extends (TRecord[K] extends TMatch ? K : never) ? K : never; export declare type VoidKeys = MatchingKeys; export interface TypeRecord { ' _emitterType'?: T; ' _eventsType'?: U; ' _emitType'?: V; } export declare type ReturnTypeOfMethod = T extends (...args: any[]) => any ? ReturnType : void; export declare type ReturnTypeOfMethodIfExists = S extends keyof T ? ReturnTypeOfMethod : void; export declare type InnerEEMethodReturnType = T extends (...args: any[]) => any ? ReturnType extends void | undefined ? FValue : TValue : FValue; export declare type EEMethodReturnType = S extends keyof T ? InnerEEMethodReturnType : FValue; declare type ListenerType = [T] extends [(...args: infer U) => any] ? U : [T, ...any[]]; export declare type OverriddenMethods = VoidKeys, EventNVK extends Exclude = Exclude, EmitVK extends VoidKeys = VoidKeys, EmitNVK extends Exclude = Exclude> = { on

(this: T, event: P, listener: (...args: ListenerType) => void): EEMethodReturnType; on

(this: T, event: P, listener: () => void): EEMethodReturnType; addListener

(this: T, event: P, listener: (...args: ListenerType) => void): EEMethodReturnType; addListener

(this: T, event: P, listener: () => void): EEMethodReturnType; addEventListener

(this: T, event: P, listener: (...args: ListenerType) => void): EEMethodReturnType; addEventListener

(this: T, event: P, listener: () => void): EEMethodReturnType; removeListener

(this: T, event: P, listener: Function): EEMethodReturnType; removeListener

(this: T, event: P, listener: Function): EEMethodReturnType; removeEventListener

(this: T, event: P, listener: Function): EEMethodReturnType; removeEventListener

(this: T, event: P, listener: Function): EEMethodReturnType; once

(this: T, event: P, listener: (...args: ListenerType) => void): EEMethodReturnType; once

(this: T, event: P, listener: () => void): EEMethodReturnType; emit

(this: T, event: P, ...args: ListenerType): EEMethodReturnType; emit

(this: T, event: P): EEMethodReturnType; }; export declare type OverriddenKeys = keyof OverriddenMethods; export declare type StrictEventEmitter = Exclude, NeededMethods extends Exclude = Exclude> = TypeRecord & Pick> & Pick, NeededMethods>; export declare type NoUndefined = T extends undefined ? never : T; export declare type StrictBroadcast, TEmitRecord extends NoUndefined = NoUndefined, VK extends VoidKeys = VoidKeys, NVK extends Exclude = Exclude> = { (event: E, request: TEmitRecord[E]): any; (event: E): any; }; export declare type EventNames, TEventRecord extends NoUndefined = NoUndefined, TEmitRecord extends NoUndefined = NoUndefined> = keyof TEmitRecord | keyof TEventRecord; export declare type OnEventNames, TEventRecord extends NoUndefined = NoUndefined> = keyof TEventRecord; export declare type EmitEventNames, TEmitRecord extends NoUndefined = NoUndefined> = keyof TEmitRecord; export {};