react-event-hook
Version:
A library for emitting and listening to events in a React application
27 lines (26 loc) • 1.04 kB
TypeScript
import type { Trim } from "./utils/trim.def";
import type { PascalCase } from "./utils/pascal-case.def";
export interface Options {
crossTab?: boolean;
}
export declare type Listener<Payload> = Payload extends void ? (handler: () => void) => void : (handler: (payload: Payload) => void) => void;
export declare type Emitter<Payload> = ((payload: Payload) => void) & {
broadcast: (payload: Payload) => void;
};
interface Base<Payload> {
listener: {
prefix: "use";
suffix: "Listener";
fn: Listener<Payload>;
};
emitter: {
prefix: "emit";
suffix: "";
fn: Emitter<Payload>;
};
}
declare type FuncName<Prefix extends string, Suffix extends string, EventName extends string> = `${Prefix}${PascalCase<Trim<EventName>>}${Suffix}`;
export declare type CreatedEvent<EventName extends string, Payload> = {
[Property in keyof Base<Payload> as FuncName<Base<Payload>[Property]["prefix"], Base<Payload>[Property]["suffix"], EventName>]: Base<Payload>[Property]["fn"];
};
export {};