core3-utils

@wixc3/patterns on Github

Home > @wixc3/patterns > EventEmitter

EventEmitter class

Basic type safe event emitter

Signature:

export declare class EventEmitter<Events extends object, EventId extends keyof Events = keyof Events> 

Example 1

const ms = new EventEmitter<{ onChange: { id: 'onChange' }; onDelete: { id: 'onDelete' } }>();
ms.subscribe('onChange', (event) => {
   event.id; // 'onChange'
});
ms.subscribe('onDelete', (event) => {
  event.id; // 'onDelete'
});

ms.notify('onChange', { id: 'onChange' }); // event is type safe

Example 2

payload type mismatch
ms.notify('onChange', { id: 'onDelete' }); // ERROR!!!

Example 3

payload type mismatch
ms.notify('onSomethingElse', { id: 'onDelete' }); // ERROR!!!

Properties

Property Modifiers Type Description
[clear](/core3-utils/patterns.eventemitter.clear.html) () => void Drop all subscriptions
[delete](/core3-utils/patterns.eventemitter.delete.html) <Event extends EventId>(event: Event) => void Drop all subscriptions of a signal
[emit](/core3-utils/patterns.eventemitter.emit.html) <Event extends EventId>(event: Event, data: Events\[Event\]) => void Notify all subscribers with arg data
[events](/core3-utils/patterns.eventemitter.events.html) `protected` Map<EventId, [Signal](/core3-utils/patterns.signal.html)<any>>
[hasSubscribers](/core3-utils/patterns.eventemitter.hassubscribers.html) (event: EventId) => boolean Check if an event has subscribers
[notify](/core3-utils/patterns.eventemitter.notify.html) <Event extends EventId>(event: Event, data: Events\[Event\]) => void Notify all subscribers with arg data
[off](/core3-utils/patterns.eventemitter.off.html) <Event extends EventId>(event: Event, handler: (data: Events\[Event\]) => void) => void Unsubscribe a handler from event
[on](/core3-utils/patterns.eventemitter.on.html) <Event extends EventId>(event: Event, handler: (data: Events\[Event\]) => void) => () => void Subscribe a handler for event
[once](/core3-utils/patterns.eventemitter.once.html) <Event extends EventId>(event: Event, handler: (data: Events\[Event\]) => void) => () => void Adds a handler that will be called at most once.
[subscribe](/core3-utils/patterns.eventemitter.subscribe.html) <Event extends EventId>(event: Event, handler: (data: Events\[Event\]) => void) => () => void Subscribe a handler for event
[unsubscribe](/core3-utils/patterns.eventemitter.unsubscribe.html) <Event extends EventId>(event: Event, handler: (data: Events\[Event\]) => void) => void Unsubscribe a handler from event