https://github.com/alienzhou/temitter
a type-safe & tiny event emitter
https://github.com/alienzhou/temitter
Last synced: about 1 month ago
JSON representation
a type-safe & tiny event emitter
- Host: GitHub
- URL: https://github.com/alienzhou/temitter
- Owner: alienzhou
- License: mit
- Created: 2022-02-10T05:33:21.000Z (over 4 years ago)
- Default Branch: main
- Last Pushed: 2022-02-10T06:17:02.000Z (over 4 years ago)
- Last Synced: 2024-04-25T17:21:32.572Z (about 2 years ago)
- Language: TypeScript
- Homepage:
- Size: 53.7 KB
- Stars: 0
- Watchers: 3
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- Changelog: CHANGELOG.md
- License: LICENSE
Awesome Lists containing this project
README
# temitter
> a **T**ype-safe & **T**iny Event **Emitter**
[](https://app.travis-ci.com/alienzhou/temitter) [](https://www.npmjs.com/package/temitter) [](https://coveralls.io/github/alienzhou/temitter?branch=main) [](https://codebeat.co/projects/github-com-alienzhou-temitter-main) [](https://opensource.org/licenses/mit-license.php)
## 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
```
```typescript
import { EventEmitter } from 'temitter';
type MyEventHandler = {
greeter: (s: string) => void;
};
const ee = new EventEmitter();
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:
```typescript
import { EventEmitter } from 'temitter';
type MyEventHandler = {
greeter: (s: string) => void;
// ...some other listeners
};
const ee = new EventEmitter();
// 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.