Type-constrained eventemitter.
npm install eventinType-constrained eventemitter.
``sh`
npm install eventin
`ts
import Eventin from 'eventin';
enum EventType {
OPEN = 'open',
CLOSE = 'close',
TOGGLE = 'toggle',
}
const e = new Eventin<
EventType,
{
[EventType.OPEN]: { id: string };
[EventType.CLOSE]: { source: number };
[EventType.TOGGLE]: boolean;
}
>();
const unlisten = e.listen(EventType.OPEN, ({ id }) => console.log(id));
const unlisten = e.listen(EventType.OPEN, ({ source }) => console.log(source)); // it will throw typescript error
e.emit(EventType.OPEN, { id: 'eventin' });
e.emit(EventType.OPEN, 123); // it will throw typescript error
/* listen once /
const unlisten = e.listen(EventType.OPEN, ({ id }) => console.log(id), {
once: true,
});
/* trigger listener synchronously /
e.emit(EventType.OPEN, { id: 'eventin' }, { sync: true });
/* unlistenAll /
e.unlistenAll(EventType.OPEN);
e.unlistenAll();
`
Also you can use e.unlisten to remove a listener:
`ts
import Eventin, { Listener } from 'eventin';
enum EventType {
OPEN = 'open',
CLOSE = 'close',
TOGGLE = 'toggle',
}
type EventTypeMapData = {
[EventType.OPEN]: { id: string };
[EventType.CLOSE]: { source: number };
[EventType.TOGGLE]: boolean;
};
const e = new Eventin
// (data: { id: string }) => void
type OpenListener = Listener
const openListener: OpenListener = (data) => console.log(data);
e.listen(EventType.OPEN, openListener);
e.unlisten(EventType.OPEN, openListener);
``