HOME


Mini Shell 1.0
Redirecting to https://devs.lapieza.net/iniciar-sesion Redirecting to https://devs.lapieza.net/iniciar-sesion.
DIR: /proc/self/root/usr/share/node_modules/@tootallnate/once/src/
Upload File :
Current File : //proc/self/root/usr/share/node_modules/@tootallnate/once/src/types.ts
import { EventEmitter } from 'events';
import { OverloadedParameters } from './overloaded-parameters';

export type FirstParameter<T> = T extends [infer R, ...any[]] ? R : never;

export type EventListener<F, T extends string | symbol> = F extends [
	T,
	infer R,
	...any[]
]
	? R
	: never;

export type EventParameters<
	Emitter extends EventEmitter
> = OverloadedParameters<Emitter['on']>;

export type EventNames<Emitter extends EventEmitter> = FirstParameter<
	EventParameters<Emitter>
>;

// @ts-ignore
export type EventListenerParameters< Emitter extends EventEmitter, Event extends EventNames<Emitter> > = WithDefault< Parameters<EventListener<EventParameters<Emitter>, Event>>, unknown[] >;

export type WithDefault<T, D> = [T] extends [never] ? D : T;

export interface AbortSignal {
	addEventListener: (name: string, listener: (...args: any[]) => any) => void;
	removeEventListener: (
		name: string,
		listener: (...args: any[]) => any
	) => void;
}