Skip to content

Commit

Permalink
Merge pull request #23 from ehaynes99/master
Browse files Browse the repository at this point in the history
Add stricter typing for Events generic parameter
  • Loading branch information
andywer authored Jan 16, 2022
2 parents 96919ee + 8063c1a commit 5515db7
Showing 1 changed file with 7 additions and 7 deletions.
14 changes: 7 additions & 7 deletions index.d.ts
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
export type Arguments<T> = [T] extends [(...args: infer U) => any]
? U
: [T] extends [void] ? [] : [T]
type EventMap = {
[key: string]: (...args: any[]) => void
}

/**
* Type-safe event emitter.
Expand All @@ -18,7 +18,7 @@ export type Arguments<T> = [T] extends [(...args: infer U) => any]
* myEmitter.emit("error", "x") // <- Will catch this type error;
* ```
*/
interface TypedEventEmitter<Events> {
interface TypedEventEmitter<Events extends EventMap> {
addListener<E extends keyof Events> (event: E, listener: Events[E]): this
on<E extends keyof Events> (event: E, listener: Events[E]): this
once<E extends keyof Events> (event: E, listener: Events[E]): this
Expand All @@ -29,11 +29,11 @@ interface TypedEventEmitter<Events> {
removeAllListeners<E extends keyof Events> (event?: E): this
removeListener<E extends keyof Events> (event: E, listener: Events[E]): this

emit<E extends keyof Events> (event: E, ...args: Arguments<Events[E]>): boolean
emit<E extends keyof Events> (event: E, ...args: Parameters<Events[E]>): boolean
// The sloppy `eventNames()` return type is to mitigate type incompatibilities - see #5
eventNames (): (keyof Events | string | symbol)[]
rawListeners<E extends keyof Events> (event: E): Function[]
listeners<E extends keyof Events> (event: E): Function[]
rawListeners<E extends keyof Events> (event: E): Events[E][]
listeners<E extends keyof Events> (event: E): Events[E][]
listenerCount<E extends keyof Events> (event: E): number

getMaxListeners (): number
Expand Down

0 comments on commit 5515db7

Please sign in to comment.