@@ -2,7 +2,8 @@ export interface EventMap { [key: string | symbol]: any[] }
22
33export type Listener < A extends any [ ] > = ( ...args : A ) => void ;
44
5- export type WildcardListener < EM extends EventMap > = Listener < EM [ keyof EM ] > ;
5+ type _WildcardListener < EM extends EventMap , K extends keyof EM = keyof EM > = Listener < K extends unknown ? [ ...EM [ K ] , K ] : [ ...EM [ K ] , K ] > ;
6+ export type WildcardListener < EM extends EventMap > = _WildcardListener < EM > ;
67
78export type ListenerMap < EM extends EventMap > = {
89 [ K in keyof EM ] : Set < Listener < EM [ K ] > >
@@ -22,13 +23,15 @@ export class LiteEmit<EM extends EventMap = EventMap> {
2223 if ( ! this . listenerMap [ event ] ) {
2324 this . listenerMap [ event ] = new Set ( ) ;
2425 }
25- this . listenerMap [ event ] . add ( listener ) ;
26+ this . listenerMap [ event ] . add ( listener as Listener < EM [ K ] > ) ;
2627 return this ;
2728 }
2829
2930 emit < K extends keyof EM > ( event : K , ...args : EM [ K ] ) : this {
30- this . wildcardListeners . forEach ( listener => listener ( ...args ) ) ;
31- this . listenerMap [ event ] ?. forEach ( listener => listener ( ...args ) ) ;
31+ if ( this . listenerMap [ event ] ) {
32+ this . wildcardListeners . forEach ( listener => listener ( ...[ ...args , event ] as any ) ) ;
33+ this . listenerMap [ event ] . forEach ( listener => listener ( ...args ) ) ;
34+ }
3235 return this ;
3336 }
3437
@@ -49,7 +52,7 @@ export class LiteEmit<EM extends EventMap = EventMap> {
4952 return this ;
5053 }
5154 if ( listener ) {
52- this . listenerMap [ event ] ?. delete ( listener ) ;
55+ this . listenerMap [ event ] ?. delete ( listener as Listener < EM [ K ] > ) ;
5356 } else {
5457 this . listenerMap [ event ] ?. clear ( ) ;
5558 }
0 commit comments