UNPKG

react-event-hook

Version:

A library for emitting and listening to events in a React application

27 lines (26 loc) 1.04 kB
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 {};