@bigmi/client
Version:
Reactive primitives for Bitcoin apps.
32 lines (31 loc) • 1.49 kB
TypeScript
import { EventEmitter } from 'eventemitter3';
type EventMap = Record<string, object | never>;
type EventKey<eventMap extends EventMap> = string & keyof eventMap;
type EventFn<parameters extends unknown[] = any[]> = (...parameters: parameters) => void;
export type EventData<eventMap extends EventMap, eventName extends keyof eventMap> = (eventMap[eventName] extends [never] ? unknown : eventMap[eventName]) & {
uid: string;
};
export declare class Emitter<eventMap extends EventMap> {
uid: string;
_emitter: EventEmitter<string | symbol, any>;
constructor(uid: string);
on<key extends EventKey<eventMap>>(eventName: key, fn: EventFn<eventMap[key] extends [never] ? [{
uid: string;
}] : [data: eventMap[key] & {
uid: string;
}]>): void;
once<key extends EventKey<eventMap>>(eventName: key, fn: EventFn<eventMap[key] extends [never] ? [{
uid: string;
}] : [data: eventMap[key] & {
uid: string;
}]>): void;
off<key extends EventKey<eventMap>>(eventName: key, fn: EventFn<eventMap[key] extends [never] ? [{
uid: string;
}] : [data: eventMap[key] & {
uid: string;
}]>): void;
emit<key extends EventKey<eventMap>>(eventName: key, ...params: eventMap[key] extends [never] ? [] : [data: eventMap[key]]): void;
listenerCount<key extends EventKey<eventMap>>(eventName: key): number;
}
export declare function createEmitter<eventMap extends EventMap>(uid: string): Emitter<eventMap>;
export {};