tsee icon indicating copy to clipboard operation
tsee copied to clipboard

Typed EventEmitter implemented with tsargs

NPM Version NPM Downloads

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;
}>();

// 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");

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';

// 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.

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).