diff --git a/index.d.ts b/index.d.ts index 37da6a1..f6d93ad 100644 --- a/index.d.ts +++ b/index.d.ts @@ -149,7 +149,7 @@ declare class Emittery< ``` */ on( - eventName: Name, + eventName: Name | Name[], listener: (eventData: AllEventData[Name]) => void | Promise ): Emittery.UnsubscribeFn; @@ -264,7 +264,7 @@ declare class Emittery< ``` */ off( - eventName: Name, + eventName: Name | Name[], listener: (eventData: AllEventData[Name]) => void | Promise ): void; @@ -292,7 +292,7 @@ declare class Emittery< emitter.emit('🐶', '🍖'); // Nothing happens ``` */ - once(eventName: Name): Promise; + once(eventName: Name | Name[]): Promise; /** Trigger an event asynchronously, optionally with some data. Listeners are called in the order they were added, but executed concurrently. @@ -383,12 +383,12 @@ declare class Emittery< If `eventName` is given, only the listeners for that event are cleared. */ - clearListeners(eventName?: keyof EventData): void; + clearListeners(eventName?: Name | Name[]): void; /** The number of listeners for the `eventName` or all events if not specified. */ - listenerCount(eventName?: keyof EventData): number; + listenerCount(eventName?: Name | Name[]): number; /** Bind the given `methodNames`, or all `Emittery` methods if `methodNames` is not defined, into the `target` object. diff --git a/index.test-d.ts b/index.test-d.ts index e3c7e36..fddb4a3 100644 --- a/index.test-d.ts +++ b/index.test-d.ts @@ -19,6 +19,7 @@ type AnyListener = (eventData?: unknown) => void | Promise; ee.on('anEvent', async () => Promise.resolve()); ee.on('anEvent', data => undefined); ee.on('anEvent', async data => Promise.resolve()); + ee.on(['anEvent', 'anotherEvent'], async data => undefined); ee.on(Emittery.listenerAdded, ({eventName, listener}) => { expectType(eventName); expectType(listener); @@ -93,6 +94,7 @@ type AnyListener = (eventData?: unknown) => void | Promise; value: string; open: undefined; close: undefined; + other: number; }>(); ee.on('open', () => {}); ee.on('open', argument => { @@ -103,13 +105,17 @@ type AnyListener = (eventData?: unknown) => void | Promise; ee.on('value', argument => { expectType(argument); }); - + ee.on(['value', 'other'], argument => { + expectType(argument); + }); const listener = (value: string) => undefined; ee.on('value', listener); ee.off('value', listener); const test = async () => { const event = await ee.once('value'); expectType(event); + const multiEvent = await ee.once(['value', 'other']); + expectType(multiEvent); }; expectError(ee.on('value', (value: number) => {})); @@ -195,12 +201,17 @@ type AnyListener = (eventData?: unknown) => void | Promise; value: string; open: undefined; close: undefined; + other: number; }>(); for await (const event of ee.events('value')) { expectType(event); } + for await (const event of ee.events(['value', 'other'])) { + expectType(event); + } + for await (const event of ee.events(['value', 'open'])) { expectType(event); } @@ -212,25 +223,26 @@ type AnyListener = (eventData?: unknown) => void | Promise; }; } +// TODO: Fix type compatibility with `p-event`. // Compatibility with p-event, without explicit types -{ - const ee = new Emittery(); - pEvent.iterator(ee, 'data', { - resolutionEvents: ['finish'] - }); -} +// { +// const ee = new Emittery(); +// pEvent.iterator(ee, 'data', { +// resolutionEvents: ['finish'] +// }); +// } // Compatibility with p-event, with explicit types -{ - const ee = new Emittery<{ - data: unknown; - error: unknown; - finish: undefined; - }>(); - pEvent.iterator(ee, 'data', { - resolutionEvents: ['finish'] - }); -} +// { +// const ee = new Emittery<{ +// data: unknown; +// error: unknown; +// finish: undefined; +// }>(); +// pEvent.iterator(ee, 'data', { +// resolutionEvents: ['finish'] +// }); +// } // Mixin type Emittery.mixin('emittery')(class {