UNPKG

electron-typescript-ipc

Version:

Library for type-safe use of contextBridge in Electron

90 lines (69 loc) 1.89 kB
# electron-typescript-ipc Library for type-safe use of contextBridge in Electron. ## Motivation When we implement ipc using contextBridge in TypeScript, we can't know if the method exists (unsafe). This library is aimed at making it type-safe to use. ## Install Install with npm (or you can use your favorite tool). ```shell npm i electron-typescript-ipc ``` ## Example We have a template repository for using this module. Please see here: **<https://github.com/JichouP/electron-typescript-ipc-example>**. ### `preload/preload.ts` ```typescript import { contextBridge, createIpcRenderer, GetApiType, } from 'electron-typescript-ipc'; import { Api } from 'path/to/api.ts'; const ipcRenderer = createIpcRenderer<Api>(); export type Api = GetApiType< { getDataFromStore: (str: string) => Promise<string>; }, { showAlert: (text: string, num: number) => Promise<void>; } >; const api: Api = { invoke: { getDataFromStore: async (key: string) => { return await ipcRenderer.invoke('getDataFromStore', key); }, }, on: { showAlert: listener => { ipcRenderer.on('showAlert', listener); }, }, }; contextBridge.exposeInMainWorld('myAPI', api); declare global { interface Window { myAPI: Api; } } ``` ### `lib/main.ts` ```typescript const createWindow = (): void => { const mainWindow = ... mainWindow.on('ready-to-show', () => { ipcMain.removeHandler<Api>('getDataFromStore'); // This is essential in case you are called multiple times ipcMain.handle<Api>('getDataFromStore', async (_event, key) => { return await store.get(key); }); setInterval(ipcMain.send<Api>(mainWindow, 'showAlert', 'Hi'), 10000) }) } ``` ### `renderer/app.ts` ```typescript window.myApi.invoke.getDataFromStore('someKey').then(console.log); window.myApi.on.showAlert((_event, text) => { alert(text); }); ```