export interface IEventEmitter< T extends object = { [s: string]: (target: any, data: any) => void }, > { on(event: Extract, listener: T[K]): void; once(event: Extract, listener: T[K]): void; off(event: Extract, listener: T[K]): void; emit( event: Extract, data: Parameters[1], ): void; }