frontend/.pnpm-store/v3/files/6e/0ae7b3cc5ccf1cccced8a2cda1362eca08a589e6590bc917e447b11a5a9d28801dce0effcc4e2d9a3e919a32610a4bf8bb9c97e5187641ddd75751b7b58a38

36 lines
1014 B
Plaintext

declare type EventArgs<T> = [T] extends [(...args: infer U) => any]
? U
: [T] extends [void]
? []
: [T];
/**
* Example:
*
* export interface BaseEvents<P, S> {
* SET_STATE: (component: BaseComponent<P, S>, state: S) => void;
* }
*/
export interface EventEmitter<EventTypes> {
addListener<EventName extends keyof EventTypes>(
event: EventName,
listener: (...args: EventArgs<EventTypes[EventName]>) => void,
): EventEmitter<EventTypes>;
on<EventName extends keyof EventTypes>(
event: EventName,
listener: (...args: EventArgs<EventTypes[EventName]>) => void,
): EventEmitter<EventTypes>;
off<EventName extends keyof EventTypes>(
event: EventName,
listener: (...args: EventArgs<EventTypes[EventName]>) => void,
): EventEmitter<EventTypes>;
emit<EventName extends keyof EventTypes>(
event: EventName,
...args: EventArgs<EventTypes[EventName]>
): boolean;
}
export declare class EventEmitter<EventTypes> {
private callbacks;
private init;
}
export {};