typed-event-dispatcher
v1.11.6
Published
Strongly-typed events that can be publicly listened but internally-only dispatched.
Downloads
165
Maintainers
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.
This is intended to be used with Classes. If you prefer using only Functions, please check create-pubsub.
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();
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: