All Projects β†’ binier β†’ tiny-typed-emitter

binier / tiny-typed-emitter

Licence: MIT license
Fully type-checked NodeJS EventEmitter

Programming Languages

javascript
184084 projects - #8 most used programming language

Projects that are alternatives of or similar to tiny-typed-emitter

dead-simple
πŸ’€πŸ’‘ Dead simple PubSub and EventEmitter in JavaScript
Stars: ✭ 21 (-78.12%)
Mutual labels:  events, event, eventemitter, eventemitter3
events
Tiny type-safe event emitter
Stars: ✭ 25 (-73.96%)
Mutual labels:  events, eventemitter, event-emitter
EventEmitter
Simple EventEmitter with multiple listeners
Stars: ✭ 19 (-80.21%)
Mutual labels:  events, event, event-emitter
tsee
Typed EventEmitter implemented with tsargs
Stars: ✭ 22 (-77.08%)
Mutual labels:  events, eventemitter, event-emitter
spa-bus
πŸ”₯Tools for multilevel components to pass values in any SPA
Stars: ✭ 15 (-84.37%)
Mutual labels:  events, event, event-emitter
event
πŸ“† Strictly typed event emitter with asynciterator support
Stars: ✭ 30 (-68.75%)
Mutual labels:  events, event-emitter
PoShLog
πŸ”© PoShLog is PowerShell cross-platform logging module. It allows you to log structured event data into console, file and much more places easily. It's built upon great C# logging library Serilog - https://serilog.net/
Stars: ✭ 108 (+12.5%)
Mutual labels:  events, event
micro-typed-events
The smallest, most convenient typesafe TS event emitter you'll ever need
Stars: ✭ 39 (-59.37%)
Mutual labels:  events, event-emitter
telephone-ts
Telephone-ts: The "Event Emitter-less" TypeScript Event Architecture.
Stars: ✭ 22 (-77.08%)
Mutual labels:  events, event-emitter
node-await-event-emitter
await events library like EventEmitter
Stars: ✭ 19 (-80.21%)
Mutual labels:  events, event-emitter
event
The implementation of the pattern observer
Stars: ✭ 45 (-53.12%)
Mutual labels:  events, event
Opendataday
Open Data Day website
Stars: ✭ 70 (-27.08%)
Mutual labels:  events, event
Eventemitter
Evented JavaScript for the browser
Stars: ✭ 3,107 (+3136.46%)
Mutual labels:  events, eventemitter
Ease
It's magic.
Stars: ✭ 1,213 (+1163.54%)
Mutual labels:  events, event
event-emitter
Event Emitter module for Nest framework (node.js) πŸ¦‹
Stars: ✭ 102 (+6.25%)
Mutual labels:  events, event-emitter
Chordly
Chordly is a javascript library that may be used to detect and act upon key sequences entered by a user.
Stars: ✭ 14 (-85.42%)
Mutual labels:  events, event
trainmanjs
TrainmanJS - Cross-Origin Communication Library
Stars: ✭ 16 (-83.33%)
Mutual labels:  events, eventemitter
evon
Fast and versatile event dispatcher code generator for Golang
Stars: ✭ 15 (-84.37%)
Mutual labels:  events, event
FixLanguageTypeJs
Tiny Library for fix problem of language selection in type text.
Stars: ✭ 15 (-84.37%)
Mutual labels:  typing, typings
Noel
A universal, human-centric, replayable javascript event emitter.
Stars: ✭ 158 (+64.58%)
Mutual labels:  events, event

tiny-typed-emitter

Have your events and their listeners type-checked with no overhead.

npm version

Install

Simply add the dependency using npm:

$ npm i tiny-typed-emitter

or using yarn:

$ yarn add tiny-typed-emitter

Usage

  1. import tiny-typed-emitter library:
import { TypedEmitter } from 'tiny-typed-emitter';
  1. define events and their listener signatures (note: quotes around event names are not mandatory):
interface MyClassEvents {
  'added': (el: string, wasNew: boolean) => void;
  'deleted': (deletedCount: number) => void;
}
  1. on this step depending on your use case, you can:
  • define your custom class extending EventEmitter:
    class MyClass extends TypedEmitter<MyClassEvents> {
      constructor() {
        super();
      }
    }
  • create new event emitter instance:
    const emitter = new TypedEmitter<MyClassEvent>();

Generic events interface

To use with generic events interface:

interface MyClassEvents<T> {
  'added': (el: T, wasNew: boolean) => void;
}

class MyClass<T> extends TypedEmitter<MyClassEvents<T>> {

}

Compatible subclasses with different events

The type of eventNames() is a superset of the actual event names to make subclasses of a TypedEmitter that introduce different events type compatible. For example the following is possible:

class Animal<E extends ListenerSignature<E>=ListenerSignature<unknown>> extends TypedEmitter<{spawn: () => void} & E> {
  constructor() {
    super();
  }
}

class Frog<E extends ListenerSignature<E>> extends Animal<{jump: () => void} & E> {
}

class Bird<E extends ListenerSignature<E>> extends Animal<{fly: () => void} & E> {
}

const animals: Animal[] = [new Frog(), new Bird()];

No Overhead

Library adds no overhead. All it does is it simply reexports renamed EventEmitter with customized typings. You can check lib/index.js to see the exported code.

Note that the project description data, including the texts, logos, images, and/or trademarks, for each open source project belongs to its rightful owner. If you wish to add or remove any projects, please contact us at [email protected].