type Options = boolean | Readonly | undefined declare function registerListener( element: Readonly | null | undefined, eventType: KD, // eslint-disable-next-line functional/prefer-immutable-types listener: (this: Document, evt: DocumentEventMap[KD]) => void, options?: Options, ): void declare function registerListener( element: Readonly | null | undefined, eventType: KH, // eslint-disable-next-line functional/prefer-immutable-types listener: (this: HTMLElement, evt: HTMLElementEventMap[KH]) => void, options?: Options, ): void declare function registerListener( element: Readonly | null | undefined, eventType: KW, // eslint-disable-next-line functional/prefer-immutable-types listener: (this: Window, evt: WindowEventMap[KW]) => void, options?: Options, ): void declare function registerListener( element: Readonly | null | undefined, eventType: string, // eslint-disable-next-line functional/prefer-immutable-types listener: (evt: Event) => void, options?: Options, ): void export { registerListener }