event.ts 714 B

12345678910111213141516171819202122232425
  1. import type { Disposable } from './disposable.js';
  2. export interface EventListener<TEvent, TThis, TArgs extends unknown[], TResult> {
  3. (this: TThis, e: TEvent, ...args: TArgs): TResult;
  4. }
  5. export interface RemoveEventListener extends Disposable {
  6. (): void;
  7. }
  8. export interface Event<TEvent, TResult = unknown> {
  9. /**
  10. * Attaches an event listener.
  11. */
  12. (listener: EventListener<TEvent, unknown, [], TResult>): RemoveEventListener;
  13. /**
  14. * Attaches an event listener that bind to `this` and `args`.
  15. */
  16. <TThis, TArgs extends unknown[]>(
  17. listener: EventListener<TEvent, TThis, TArgs, TResult>,
  18. thisArg: TThis,
  19. ...args: TArgs
  20. ): RemoveEventListener;
  21. }