Implements Observer pattern that support statically analyze event types in TypeScript.
Using Observer pattern in distributed event handling systems is good practice. In the JavaScript community its most common implementation is EventEmitter. However using the EventEmitter in TypeScript you lose out robust type checking when publishing and subscribing to events.
Instead, for the sake of event type safety, we can create an emitter per event type:
const onFoo = new TypedEvent<Foo>();
const onBar = new TypedEvent<Bar>();
// Emit:
onFoo.emit(foo);
onBar.emit(bar);
// Listen:
onFoo.register((foo) => console.log(foo));
onBar.register((bar) => console.log(bar));
This has the following advantages:
- The types of events are easily discoverable as variables.
- The event emitter variables are easily refactored independently.
- Type safety for event data structures.
And this package implements the above idea.
This package is published in the NPM registry and can be installed using any compatible package manager:
# using npm
npm install typesafe-typed-event
# using Yarn
yarn add typesafe-typed-event
Subscribing and publishing event:
import { TypedEvent } from "typesafe-typed-event";
// define event type structure
interface IEventData {
foo: string;
bar: number;
}
// create instance of TypedEvent
const event = new TypedEvent<IEventData>();
// register event handler for listening events
event.register((data) => {
console.log(data);
});
// publish event
event.emit({ foo: "foo", bar: 12345 });
To unregister event handler, you can use:
event.unregister(handler);
Or:
handler.dispose();
Released under MIT License.