@nowarajs/typed-event-emitter
Version:
Typed Event Emitter is a TypeScript library that provides a strongly typed event emitter, allowing developers to define custom events with specific payloads, ensuring type safety and reducing runtime errors in event-driven applications.
111 lines (78 loc) โข 3.11 kB
Markdown
- [๐ฏ TypedEventEmitter](
- [๐ Table of Contents](
- [๐ Description](
- [โจ Features](
- [๐ง Installation](
- [โ๏ธ Usage](
- [๐ API Reference](
- [โ๏ธ License](
- [๐ง Contact](
> 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.
- ๐ **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
```bash
bun add @nowarajs/typed-event-emitter
```
```typescript
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()
});
```
```typescript
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);
```
You can find the complete API reference documentation for `TypedEventEmitter` at:
- [Reference Documentation](https://nowarajs.github.io/typed-event-emitter/)
Distributed under the MIT License. See [LICENSE](./LICENSE) for more information.
- GitHub: [NowaraJS](https://github.com/NowaraJS)
- Package: [@nowarajs/typed-event-emitter](https://www.npmjs.com/package/@nowarajs/typed-event-emitter)