
tsee
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
Install & use
npm i tsee
Simple usage:
import { EventEmitter } from "tsee";
const events = new EventEmitter<{
foo: (a: number, b: string) => void;
}>();
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");
Advenced usage for non default event emitters
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';
const typed = new CustomEventEmitter() as any as tsee.IEventEmitter<{ ... }>;
const typed = asTypedEventEmitter<{ ... }>(new CustomEventEmitter());
tsee.EventEmitter
class is implemented EventEmitter from 'events' package.
Api
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)
.