@amandaghassaei/event-dispatcher

Parent class to support custom event listeners.
- Written in TypeScript with exported type declarations.
- Includes unit tests with 100% coverage.
Table of Contents:
Installation
Install via NPM
npm install @amandaghassaei/event-dispatcher
Then import via:
import { EventDispatcherPrototype } from '@amandaghassaei/event-dispatcher';
Use
See full API documentation in docs/.
import { EventDispatcher, Listener } from '../src/index';
const ADDED_EVENT = 'ADDED_EVENT';
const CHANGE_EVENT = 'CHANGE_EVENT';
const FINISHED_EVENT = 'FINISHED_EVENT';
const REMOVED_EVENT = 'REMOVED_EVENT';
type MyClassEventType =
| typeof ADDED_EVENT
| typeof CHANGE_EVENT
| typeof FINISHED_EVENT
| typeof REMOVED_EVENT;
class MyClass extends EventDispatcher<MyClassEventType> {
addOneTimeEventListener(type: typeof ADDED_EVENT, listener: () => void): void;
addOneTimeEventListener(type: typeof REMOVED_EVENT, listener: () => void): void;
addOneTimeEventListener<S extends MyClassEventType>(type: S, listener: () => void) {
super.addOneTimeEventListener(type, listener);
}
addEventListener(type: typeof CHANGE_EVENT, listener: (object: MyClass) => void): void;
addEventListener(type: typeof FINISHED_EVENT, listener: (object: MyClass) => void): void;
addEventListener<S extends MyClassEventType>(type: S, listener: Listener) {
super.addEventListener(type, listener);
}
removeEventListener(type: typeof CHANGE_EVENT, listener: (object: MyClass) => void): void;
removeEventListener(type: typeof FINISHED_EVENT, listener: (object: MyClass) => void): void;
removeEventListener<S extends MyClassEventType>(type: S, listener: Listener) {
super.removeEventListener(type, listener);
}
protected _dispatchEvent(type: typeof CHANGE_EVENT, object: MyClass): void;
protected _dispatchEvent(type: typeof FINISHED_EVENT, object: MyClass): void;
protected _dispatchEvent(type: typeof REMOVED_EVENT): void;
protected _dispatchEvent<S extends MyClassEventType>(type: S, object?: any) {
super._dispatchEvent(type, object);
}
}
const instance = new MyClass();
instance.addEventListener(CHANGE_EVENT, (object) => {
console.log('instance changed:', object);
});
License
This work is distributed under an MIT license. It has no dependencies.
Acknowledgements
Inspired by Three.js's EventDispatcher class.
Development
Install dev-dependencies:
npm install
Build from src
to dist
and compile docs:
npm run build
Test with code coverage:
npm run test-with-coverage