Skip to content

Commit 148d128

Browse files
committed
docs: 📝 add more jsdoc comments
1 parent e556d8c commit 148d128

File tree

1 file changed

+41
-0
lines changed

1 file changed

+41
-0
lines changed

src/TypedEventTarget.ts

Lines changed: 41 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,33 @@
1+
/**
2+
* A function that can be passed to the `listener` parameter of {@link TypedEventTarget.addEventListener} and {@link TypedEventTarget.removeEventListener}.
3+
*
4+
* @template M A map of event types to their respective event classes.
5+
* @template T The type of event to listen for (has to be keyof `M`).
6+
*/
17
export type TypedEventListener<M, T extends keyof M> = (
28
evt: M[T]
39
) => void | Promise<void>;
410

11+
/**
12+
* An object that can be passed to the `listener` parameter of {@link TypedEventTarget.addEventListener} and {@link TypedEventTarget.removeEventListener}.
13+
*
14+
* @template M A map of event types to their respective event classes.
15+
* @template T The type of event to listen for (has to be keyof `M`).
16+
*/
517
export interface TypedEventListenerObject<M, T extends keyof M> {
618
handleEvent: (evt: M[T]) => void | Promise<void>;
719
}
820

21+
/**
22+
* Type of parameter `listener` in {@link TypedEventTarget.addEventListener} and {@link TypedEventTarget.removeEventListener}.
23+
*
24+
* The object that receives a notification (an object that implements the Event interface) when an event of the specified type occurs.
25+
*
26+
* Can be either an object with a handleEvent() method, or a JavaScript function.
27+
*
28+
* @template M A map of event types to their respective event classes.
29+
* @template T The type of event to listen for (has to be keyof `M`).
30+
*/
931
export type TypedEventListenerOrEventListenerObject<M, T extends keyof M> =
1032
| TypedEventListener<M, T>
1133
| TypedEventListenerObject<M, T>;
@@ -14,6 +36,25 @@ type ValueIsEvent<T> = {
1436
[key in keyof T]: Event;
1537
};
1638

39+
/**
40+
* Typescript friendly version of {@link EventTarget}
41+
*
42+
* @template M A map of event types to their respective event classes.
43+
*
44+
* @example
45+
* ```typescript
46+
* interface MyEventMap {
47+
* hello: Event;
48+
* time: CustomEvent<number>;
49+
* }
50+
*
51+
* const eventTarget = new TypedEventTarget<MyEventMap>();
52+
*
53+
* eventTarget.addEventListener('time', (event) => {
54+
* // event is of type CustomEvent<number>
55+
* });
56+
* ```
57+
*/
1758
export interface TypedEventTarget<M extends ValueIsEvent<M>> {
1859
/** Appends an event listener for events whose type attribute value is type.
1960
* The callback argument sets the callback that will be invoked when the event

0 commit comments

Comments
 (0)