export interface ReadonlyEmitter { on(type: '*', listener: (event: Event) => unknown): this; on(type: E['type'], listener: (event: E) => unknown): this; once(type: '*', listener: (event: Event) => unknown): this; once(type: E['type'], listener: (event: E) => unknown): this; off(type: '*', listener: (event: Event) => unknown): this; off(type: E['type'], listener: (event: E) => unknown): this; } export interface ReadonlyAsyncEmitter { on( type: E['type'] | '*', listener: (event: E) => void | Promise, weight?: number, ): this; once( type: E['type'] | '*', listener: (event: E) => void | Promise, weight?: number, ): this; off(type: E['type'] | '*', listener: (event: E) => void | Promise): this; } export interface Emitter extends ReadonlyEmitter { emit(event: Event): void; } export interface AsyncEmitter extends ReadonlyAsyncEmitter { emit(event: Event): Promise; }