README
Typed Event Dispatcher
Strongly-typed events that can be publicly listened but internally-only dispatched.
A lightweight, fully-tested and dependency-free lib made for Typescript (see live example) and JavaScript (see live example) codebases.
Install
npm install typed-event-dispatcher
Import
// Import as an ES Module.
import { TypedEventDispatcher } from "typed-event-dispatcher";
// Or require as a CommonJS Module.
const { TypedEventDispatcher } = require("typed-event-dispatcher");
// Or import it from URL.
import { TypedEventDispatcher } from "https://esm.sh/typed-event-dispatcher";
<!-- Or use it directly in the browser. -->
<script src="https://unpkg.com/typed-event-dispatcher"></script>
<script>
const { TypedEventDispatcher } = window["typed-event-dispatcher"];
</script>
Usage
class Counter {
// 1️⃣ Create a private event dispatcher.
private onCountIncreasedDispatcher = new TypedEventDispatcher<number>();
// 2️⃣ Create a public event getter.
public get onCountIncreased() {
return this.onCountIncreasedDispatcher.getter;
}
public increaseCountOncePerSecond() {
setInterval(() => {
this.increaseCount();
// 3️⃣ Dispatch the event so listeners can react to it.
this.onCountIncreasedDispatcher.dispatch(this.count);
}, 1000);
}
private count = 0;
private increaseCount() {
this.count++;
}
}
class Example {
private counter = new Counter();
public start() {
console.log("Starting count...");
// 4️⃣ Listen to events dispatched by other classes.
this.counter.onCountIncreased.addListener((count) => {
console.log(`Count increased to ${count}.`);
});
this.counter.increaseCountOncePerSecond();
}
}
new Example().start();
And here's a simplified version of the example above:
function createCounter() {
let count = 0;
const { dispatch, getter } = new TypedEventDispatcher(count);
const increaseCount = () => dispatch(++count);
return { increaseCount, countIncreasedEvent: getter };
}
function startExample() {
const { increaseCount, countIncreasedEvent } = createCounter();
console.log("Starting count...");
countIncreasedEvent.addListener((count) =>
console.log(`Count increased to ${count}.`)
);
setInterval(increaseCount, 1000);
}
startExample();
Further Reading
For more details about how to use this lib, please refer to the Usage Overview.
Check also the Online Documentation. Or generate it locally by running npm run docs
.
Although all you need to know is only two definitions: