UNPKG

@electron-toolkit/typed-ipc

Version:
27 lines (24 loc) 1.24 kB
type IpcListenEventMap = { [key: string]: [...args: any[]]; }; type IpcHandleEventMap = { [key: string]: (...args: any[]) => any; }; type IpcEventMap = IpcListenEventMap | IpcHandleEventMap; type ExtractArgs<T> = T extends IpcListenEventMap ? T : never; type ExtractHandler<T> = T extends IpcHandleEventMap ? T : never; /** * Typed emitter for Electron `ipcRenderer`. */ declare class IpcEmitter<T extends IpcEventMap> { send<E extends keyof ExtractArgs<T>>(channel: Extract<E, string>, ...args: ExtractArgs<T>[E]): void; invoke<E extends keyof ExtractHandler<T>>(channel: Extract<E, string>, ...args: Parameters<ExtractHandler<T>[E]>): Promise<ReturnType<ExtractHandler<T>[E]>>; } /** * Typed listener for Electron `ipcRenderer`. */ declare class IpcListener<T extends IpcListenEventMap> { on<E extends keyof T>(channel: Extract<E, string>, listener: (e: Electron.IpcRendererEvent, ...args: T[E]) => void): () => void; once<E extends keyof T>(channel: Extract<E, string>, listener: (e: Electron.IpcRendererEvent, ...args: T[E]) => void | Promise<void>): () => void; } export { type ExtractArgs, type ExtractHandler, IpcEmitter, type IpcEventMap, type IpcHandleEventMap, type IpcListenEventMap, IpcListener };