Package Exports
- @nowarajs/typed-event-emitter
- @nowarajs/typed-event-emitter/types
Readme
๐ฏ NowaraJS - TypedEventEmitter
๐ Table of Contents
๐ Description
A TypeScript library that provides a strongly typed event emitter for type-safe event handling.
TypedEventEmitter extends EventEmitter
with full TypeScript support, allowing developers to define custom events with specific payloads while ensuring complete type safety and reducing runtime errors in event-driven applications.
โจ Features
- ๐ Type Safety: Full TypeScript support with strongly typed event names and payloads
- ๐งฉ Generic Design: Define custom event maps for your specific use cases
- ๐ Familiar API: Extends EventEmitter with the same familiar methods
- ๐ฆ Zero Dependencies: No external runtime dependencies
- ๐ Modern: Built with modern TypeScript and supports ESM
- ๐งช Well Tested: Comprehensive test suite included
๐ง Installation
bun add @nowarajs/typed-event-emitter
โ๏ธ Usage
Basic Usage
import { TypedEventEmitter } from '@nowarajs/typed-event-emitter';
// Define your event map
interface MyEvents {
userLogin: [{ userId: string; timestamp: Date }];
userLogout: [{ userId: string }];
dataUpdate: [{ id: number; data: any }];
error: [Error];
}
// Create a typed event emitter
const emitter = new TypedEventEmitter<MyEvents>();
// Type-safe event listening
emitter.on('userLogin', (payload) => {
// payload is automatically typed as { userId: string; timestamp: Date }
console.log(`User ${payload.userId} logged in at ${payload.timestamp}`);
});
// Type-safe event emission
emitter.emit('userLogin', {
userId: 'user123',
timestamp: new Date()
});
Advanced Usage
import { TypedEventEmitter } from '@nowarajs/typed-event-emitter';
// Multiple parameters
interface Events {
move: [x: number, y: number];
click: [button: 'left' | 'right', x: number, y: number];
keypress: [key: string, modifiers: string[]];
}
const input = new TypedEventEmitter<Events>();
// Multiple parameters are fully typed
input.on('move', (x, y) => {
console.log(`Mouse moved to ${x}, ${y}`);
});
input.on('click', (button, x, y) => {
console.log(`${button} click at ${x}, ${y}`);
});
// Emit with multiple arguments
input.emit('move', 100, 200);
input.emit('click', 'left', 50, 75);
๐ API Reference
You can find the complete API reference documentation for TypedEventEmitter
at:
โ๏ธ License
Distributed under the MIT License. See LICENSE for more information.
๐ง Contact
- GitHub: NowaraJS
- Package: @nowarajs/typed-event-emitter