Typed EventEmitter implemented with typed args, based on nodejs EventEmitter.
Fully implements NodeJS.EventEmitter
type, provides interface & proxy class.
Check 'tseep'! Same api but world fastest event emitter
npm i tsee
Simple usage:
import { EventEmitter } from "tsee";
const events = new EventEmitter<{
foo: (a: number, b: string) => void;
}>();
// foo's arguments is fully type checked
events.emit("foo", 123, "hello world");
Cast any other compatible to NodeJS.EventEmitter
to typed:
import { asTypedEventEmitter } from "tsee";
const typedEmitter = asTypedEventEmitter<{
foo: (a: number, b: string) => void;
boo: (a: number, b: string) => void;
}>(myEmitter);
typedEmitter.emit("foo", 123, "hello world");
If you use custom EventEmitter implementation, you can simply cast it to tsee.IEventEmitter
interface:
import { CustomEventEmitter } from 'my-event-emitter';
import * as tsee from 'tsee';
// Simple type case
const typed = new CustomEventEmitter() as any as tsee.IEventEmitter<{ ... }>;
// Functional cast with `NodeJS.EventEmitter` type constraints
const typed = asTypedEventEmitter<{ ... }>(new CustomEventEmitter());
tsee.EventEmitter
class is implemented EventEmitter from 'events' package.
EventEmitter<T>
where T
extends { [eventName]: Call signature }
.
EventEmitter.emit
's args is fully typed based on events map.
For foo
event in example above, signature is: emit(eventName: 'foo', a: number, b: string)
.