/// import { EventEmitter } from 'events'; import { OverloadedParameters } from './overloaded-parameters'; export type FirstParameter = T extends [infer R, ...any[]] ? R : never; export type EventListener = F extends [ T, infer R, ...any[] ] ? R : never; export type EventParameters = OverloadedParameters; export type EventNames = FirstParameter>; export type EventListenerParameters> = WithDefault, Event>>, unknown[]>; export type WithDefault = [T] extends [never] ? D : T; export interface AbortSignal { aborted: boolean; addEventListener: (name: string, listener: (...args: any[]) => any) => void; removeEventListener: (name: string, listener: (...args: any[]) => any) => void; }