|
25 | 25 |
|
26 | 26 | import { EventEmitter } from "events";
|
27 | 27 |
|
| 28 | +// tslint:disable:ban-types |
| 29 | + |
| 30 | +/** |
| 31 | + * @hidden |
| 32 | + */ |
| 33 | +export interface EventListeners<T> { |
| 34 | + newListener: keyof T; |
| 35 | + removeListener: keyof T; |
| 36 | +} |
| 37 | + |
28 | 38 | /**
|
29 | 39 | * @hidden
|
30 | 40 | */
|
31 | 41 | export interface TypedDispatcher<T> {
|
32 | 42 | addEventListener<K extends keyof T>(type: K, listener: (this: this, event: T[K]) => void): void;
|
| 43 | + addEventListener<E extends keyof EventListeners<T>>(type: E, listener: (this: this, event: EventListeners<T>[E]) => void): void; |
33 | 44 | removeEventListener<K extends keyof T>(type: K, callback: (this: this, event: T[K]) => void): void;
|
| 45 | + removeEventListener<E extends keyof EventListeners<T>>(type: E, callback: (this: this, event: EventListeners<T>[E]) => void): void; |
34 | 46 | dispatchEvent<K extends keyof T>(event: T[K]): boolean;
|
35 | 47 | addListener<K extends keyof T>(event: K, listener: (data: T[K]) => void): this;
|
| 48 | + addListener<E extends keyof EventListeners<T>>(event: E, listener: (data: EventListeners<T>[E]) => void): this; |
36 | 49 | on<K extends keyof T>(event: K, listener: (data: T[K]) => void): this;
|
| 50 | + on<E extends keyof EventListeners<T>>(event: E, listener: (data: EventListeners<T>[E]) => void): this; |
37 | 51 | once<K extends keyof T>(event: K, listener: (data: T[K]) => void): this;
|
| 52 | + once<E extends keyof EventListeners<T>>(event: E, listener: (data: EventListeners<T>[E]) => void): this; |
38 | 53 | prependListener<K extends keyof T>(event: K, listener: (data: T[K]) => void): this;
|
39 | 54 | prependOnceListener<K extends keyof T>(event: K, listener: (data: T[K]) => void): this;
|
40 | 55 | removeListener<K extends keyof T>(event: K, listener: (data: T[K]) => void): this;
|
| 56 | + removeListener<E extends keyof EventListeners<T>>(event: E, listener: (data: EventListeners<T>[E]) => void): this; |
41 | 57 | removeAllListeners<K extends keyof T>(event?: K): this;
|
42 |
| - // tslint:disable-next-line:ban-types |
| 58 | + removeAllListeners<E extends keyof EventListeners<T>>(event?: E): this; |
43 | 59 | listeners<K extends keyof T>(event: K): Array<Function>;
|
| 60 | + listeners<E extends keyof EventListeners<T>>(event: EventListeners<T>[E]): Array<Function>; |
44 | 61 | emit<K extends keyof T>(event: K, data: T[K]): boolean;
|
45 |
| - eventNames<K extends keyof T>(): Array<K>; |
| 62 | + eventNames<K extends keyof T, E extends keyof EventListeners<T>>(): Array<K | E>; |
46 | 63 | listenerCount<K extends keyof T>(type: K): number;
|
| 64 | + listenerCount<E extends keyof EventListeners<T>>(type: EventListeners<T>[E]): number; |
47 | 65 | setMaxListeners(n: number): this;
|
48 | 66 | getMaxListeners(): number;
|
49 | 67 | }
|
|
0 commit comments