import type { Disposable } from "./disposable.js"; export interface EventListener< TEvent, TThis, TArgs extends unknown[], TResult, > { (this: TThis, e: TEvent, ...args: TArgs): TResult; } export interface RemoveEventListener extends Disposable { (): void; } export interface Event { /** * Attaches an event listener. */ ( listener: EventListener, ): RemoveEventListener; /** * Attaches an event listener that bind to `this` and `args`. */ ( listener: EventListener, thisArg: TThis, ...args: TArgs ): RemoveEventListener; }