Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- declare class NodeEventEmitter<Target extends any = {}, Events = {}, EventNames extends keyof Events = keyof Events> {
- addListener<K extends EventNames>(event: K, listener: (...args: InferArgs<Events[K]>) => void, ...targs: ArgsTail2<Target["addListener"]>): this;
- on<K extends EventNames>(event: K, listener: (...args: InferArgs<Events[K]>) => void, ...targs: ArgsTail2<Target["on"]>): this;
- once<K extends EventNames>(event: K, listener: (...args: InferArgs<Events[K]>) => void, ...targs: ArgsTail2<Target["once"]>): this;
- removeListener<K extends EventNames>(event: K, listener: (...args: any[]) => void, ...targs: ArgsTail2<Target["removeListener"]>): this;
- off<K extends EventNames>(event: K, listener: (...args: InferArgs<Events[K]>) => void, ...targs: ArgsTail2<Target["off"]>): this;
- removeAllListeners(event?: EventNames, ...targs: ArgsTail1<Target["removeAllListeners"]>): this;
- setMaxListeners(n: number, ...targs: ArgsTail1<Target["setMaxListeners"]>): this;
- getMaxListeners(...targs: ArgsTail0<Target["getMaxListeners"]>): number;
- listeners<K extends EventNames>(event: K, ...targs: ArgsTail1<Target["listeners"]>): Events[K];
- rawListeners<K extends EventNames>(event: K, ...targs: ArgsTail1<Target["rawListeners"]>): Events[K];
- emit<K extends EventNames>(event: K, ...args: InferArgs<Events[K]>): boolean;
- listenerCount(type: EventNames, ...targs: ArgsTail1<Target["listenerCount"]>): number;
- // Added in Node 6...
- prependListener<K extends EventNames>(event: K, listener: (...args: InferArgs<Events[K]>) => void, ...targs: ArgsTail2<Target["prependListener"]>): this;
- prependOnceListener<K extends EventNames>(event: K, listener: (...args: InferArgs<Events[K]>) => void, ...targs: ArgsTail2<Target["prependOnceListener"]>): this;
- eventNames(...targs: ArgsTail0<Target["eventNames"]>): Array<EventNames>;
- }
- export type AsTypeSafeEventEmitter<T, Events> =
- Pick<NodeEventEmitter<T, Events>, Intersection<T, NodeEventEmitter>> &
- Pick<T, Exclude<keyof T, Intersection<T, NodeEventEmitter>>>;
- type ArgsTail0<T> = InferArgs<T>;
- type ArgsTail1<T> = T extends (a: any, ...args: infer U) => any ? U : never;
- type ArgsTail2<T> = T extends (a: any, b: any, ...args: infer U) => any ? U : never;
- type InferArgs<T> = T extends (...args: infer U) => any ? U : never;
- type Intersection<A, B> = keyof A & keyof B;
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement