Emitten
is a very basic event emitter for TypeScript.
This simple class
allows you to subscribe/unsubscribe to a defined library of events.
Add Emitten
to your project.
# Using NPM
npm install emitten
# Or some other package manager, such as Yarn
yarn add emitten
Import and start emit’in!
// Import the fully public Emitten variant.
// Alternatively, use the fully protected variant: EmittenProtected
// Or, the partially protected variant: EmittenCommon
import {Emitten} from 'emitten';
// Define your “event map” of `eventName: listener(args)` pairs.
// Both the `eventName` and the `args` from the `listener` are
// captured by TypeScript to assert type-safety!
type EventMap = {
change: (value: string) => void;
count: (value?: number) => void;
collect: (...values: boolean[]) => void;
other: (required: string, ...optional: string[]) => void;
};
// Instantiate, passing `EventMap` as a generic.
const myEmitter = new Emitten<EventMap>();
// By referencing the `EventMap` you created,
// you can assign the correct type to your listeners.
const handleChange: EventMap['change'] = (value) => {};
// Register a subscription!
myEmitter.on('change', handleChange);
// Emit an event! The arguments accepted
// by `.emit()` will be correctly typed.
myEmitter.emit('change', 'Hello world');
// Remove a subscription!
myEmitter.off('change', handleChange);
// Register a subscription only once! The listener
// will be automatically removed after a single `emit`.
myEmitter.once('count', (value = 0) => {});
myEmitter.emit('count', 123);
// Capture and manually call the removal function!
// The arguments accepted by any listener will correctly
// correspond with the registered `eventName`.
const dispose = myEmitter.on('collect', (...values) => {});
myEmitter.emit('collect', true, false, !true, !false);
dispose();
// Get a list of all the events that currently
// have subscriptions.
const currentEvents = myEmitter.activeEvents;
// Remove all registered listeners!
myEmitter.empty();
For more guidance, please take a look at the Examples document
.