0.2.1 • Published 8 months ago

@bscotch/emitter v0.2.1

Weekly downloads
-
License
MIT
Repository
github
Last release
8 months ago

EventEmitter2 (with types!)

Existing EventEmitter libraries typically do not provide much support for indicating what events and payloads are available on a given emitter. This library adds that support to the popular EventEmitter2 library.

Usage

Events can be described as a string (when just the event name is needed because there is no expected payload) or as an object with a payload:

import {createEmitter} from '@bscotch/emitter';

type MySimpleEvent = "my-simple-event";
interface MyComplexEvent {
    name: "my-complex-event";
    // The payload must be a *tuple* of the arguments that will
    // be passed to the event handler.
    payload: [arg0: string, arg1: { foo: number }];
}

// For best results, events should be collected in a tuple type
type MyEvents = [MySimpleEvent, MyComplexEvent];

const emitter = createEmitter<MyEvents>();

// Now you'll have typed emitter methods!
emitter.on('my-simple-event', () => {});
emitter.emit('my-simple-event');

emitter.on('my-complex-event', (arg0, arg1) => {}); // <- callback is typed!
emitter.emit('my-complex-event', 'foo', { foo: 1 }); // <- arguments are typed!