Skip to content

Commit

Permalink
feat(utils): better typings for event targets
Browse files Browse the repository at this point in the history
  • Loading branch information
Jakub Freisler committed Mar 14, 2021
1 parent ddc5f52 commit 0ee1fdc
Showing 1 changed file with 9 additions and 9 deletions.
18 changes: 9 additions & 9 deletions packages/utils/src/events.ts
Original file line number Diff line number Diff line change
Expand Up @@ -12,23 +12,23 @@ export type CustomEventListener<E extends keyof EventDetailMap = keyof EventDeta
// TODO: add possibility to pass event/target array?

export const on: {
<E extends keyof EventDetailMap>(target: Element, event: E, handler: CustomEventListener<E>, options?: boolean | AddEventListenerOptions): void;
(target: Element, event: string, handler: EventListener, options?: boolean | AddEventListenerOptions): void;
} = (target: Element, event: string, handler: EventListener | CustomEventListener, options?: boolean | AddEventListenerOptions) => {
<E extends keyof EventDetailMap>(target: EventTarget, event: E, handler: CustomEventListener<E>, options?: boolean | AddEventListenerOptions): void;
(target: EventTarget, event: string, handler: EventListener, options?: boolean | AddEventListenerOptions): void;
} = (target: EventTarget, event: string, handler: EventListener | CustomEventListener, options?: boolean | AddEventListenerOptions) => {
target.addEventListener(event, handler as EventListener, options);
}

export const off: {
<E extends keyof EventDetailMap>(target: Element, event: E, handler: CustomEventListener<E>): void;
(target: Element, event: string, handler: EventListener): void;
} = (target: Element, event: string, handler: EventListener | CustomEventListener) => {
<E extends keyof EventDetailMap>(target: EventTarget, event: E, handler: CustomEventListener<E>): void;
(target: EventTarget, event: string, handler: EventListener): void;
} = (target: EventTarget, event: string, handler: EventListener | CustomEventListener) => {
target.removeEventListener(event, handler as EventListener);
}

export const dispatch: {
<E extends keyof EventDetailMap, P extends EventDetailMap[E]>(target: Element, event: E, ...[payload, options]: (P extends undefined ? [undefined?, EventInit?] : never)): boolean;
<E extends keyof EventDetailMap>(target: Element, event: E, payload: EventDetailMap[E], options?: EventInit): boolean;
<E extends keyof EventDetailMap, P extends EventDetailMap[E]>(target: EventTarget, event: E, ...[payload, options]: (P extends undefined ? [undefined?, EventInit?] : never)): boolean;
<E extends keyof EventDetailMap>(target: EventTarget, event: E, payload: EventDetailMap[E], options?: EventInit): boolean;
} = <E extends keyof EventDetailMap>(
target: Element, event: E, payload?: EventDetailMap[E], options?: EventInit
target: EventTarget, event: E, payload?: EventDetailMap[E], options?: EventInit
) =>
target.dispatchEvent(new CustomEvent(event, Object.assign({ detail: payload }, options)));

0 comments on commit 0ee1fdc

Please sign in to comment.