Skip to content

Instantly share code, notes, and snippets.

View slavarazum's full-sized avatar

Slava Razum slavarazum

View GitHub Profile
@slavarazum
slavarazum / event-bus.ts
Last active July 21, 2023 15:52
A TypeScript `EventBus` class for type-safe event handling and dispatching, including support for one-time event listeners.
type Listener<T extends any[]> = (...args: T) => void;
export default class EventBus<EventMap extends Record<keyof EventMap, any[]>> {
private listeners: Partial<Record<keyof EventMap, Listener<EventMap[keyof EventMap]>[]>> = {};
once<K extends keyof EventMap>(event: K, listener: Listener<EventMap[K]>): void {
const onceListener: Listener<EventMap[K]> = (...args: EventMap[K]) => {
listener(...args);
this.off(event, onceListener);
@slavarazum
slavarazum / oneOf.js
Created December 22, 2022 00:33
One of Value
export default function oneOf(values) {
return function (value) {
return values.indexOf(value) !== -1;
};
}