temitter

a type-safe & tiny event emitter

Usage no npm install needed!

<script type="module">
  import temitter from 'https://cdn.skypack.dev/temitter';
</script>

README

temitter

a Type-safe & Tiny Event Emitter

Build Status NPM version Coverage Status codebeat badge MIT License

Features

  • 🔐 Fully type safe for typescript
  • 💕 Support both browsers and nodejs
  • 🍃 Tiny size (~300 Byte after minified & gzip)
  • 🔎 Synchronous nature

Quick Start

npm i temitter
import { EventEmitter } from 'temitter';
type MyEventHandler = {
    greeter: (s: string) => void;
};
const ee = new EventEmitter<MyEventHandler>();

ee.on('greeter', s => console.log(s));
ee.emit('greeter', 'hi');

How to use

It has most the same APIs as other event emitter libraries:

  • .on: add event listeners
  • .off: remove event listeners
  • .emit: emit an event with data

You can provide a specific type for EventMap to make fully type-safe:

import { EventEmitter } from 'temitter';

type MyEventHandler = {
    greeter: (s: string) => void;
    // ...some other listeners
};

const ee = new EventEmitter<MyEventHandler>();

// then event name 'greeter' and its listener will have the correct type
ee.on('greeter', s => console.log(s));

// can only emit 'greeter' with a string
ee.emit('greeter', 'hi');

// ❌ ee.emit('greeter', 100);
// typescript compile error: should pass a string but got a number (100)

APIs

.on(event, listener)

Listen on an event.

It will return the same EventEmitter instance.

.off(event, listener?)

Remove the listener of an event. If it's called without the listener parameter, it will remove all listeners of the given event.

It will return the same EventEmitter instance.

.emit(event, ...data)

Emit the event with some data. .emit is a synchronous call.

It will return the same EventEmitter instance.

.once(event, listener)

Listen on an event and promise to be called only once.

It will return the same EventEmitter instance.

.offAll()

Remove all listeners of all events.

It will return the same EventEmitter instance.

.eventNames

The EventEmitter instance contains a .eventNames property. You can use this property get all valid events. A valid event is a event that has at least one listener on itself.