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.
This is intended to be used with Classes. If you prefer using only Functions, please check create-pubsub.
npm install typed-event-dispatcher
// 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>
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();
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
.