@cch137/emitter
Version:
`@cch137/emitter` is a versatile event emitter package designed to work seamlessly in both browser and Node.js environments. It provides a simple yet powerful interface for managing event-driven architecture in your applications.
17 lines • 1.03 kB
TypeScript
export type EventMap<T> = Record<keyof T, any[]> | DefaultEventMap;
type DefaultEventMap = [never];
type Args<K, T> = T extends DefaultEventMap ? [...args: any[]] : K extends keyof T ? T[K] : never;
type EventName<K, T> = T extends DefaultEventMap ? string | symbol | number : K | keyof T;
type Listener<K, T> = T extends DefaultEventMap ? (...args: any[]) => void : K extends keyof T ? T[K] extends unknown[] ? (...args: T[K]) => void : never : never;
export type ExtractEventMap<T> = T extends Emitter<infer U> ? U : never;
export default class Emitter<T extends EventMap<T>> {
private listeners;
private onces;
on<K>(eventName: EventName<K, T>, listener: Listener<K, T>): this;
once<K>(eventName: EventName<K, T>, listener: Listener<K, T>): this;
off<K>(eventName: EventName<K, T>, listener: Listener<K, T>): this;
emit<K>(eventName: EventName<K, T>, ...args: Args<K, T>): boolean;
clear<K>(eventName: EventName<K, T>, ...args: Args<K, T>): this;
}
export {};
//# sourceMappingURL=index.d.ts.map