export type MessageTimings = { upstream: number; downstream: number; handle: number; }; export type ExecuteResultSuccess = { timings: MessageTimings, success: true, result: T } export type ExecuteResultError = { timings: MessageTimings, success: false, error: string } export type ExecuteResult = ExecuteResultError | ExecuteResultSuccess; export type GenericCommands = {[key: string]: any}; export type GenericCommandMapping = { [Key in keyof CommandsToWorker | keyof CommandsFromWorker]: any } export type CommandResponseType< SendCommands extends GenericCommands, ReceiveCommands extends GenericCommands, Mapping extends GenericCommandMapping, Command extends keyof SendCommands> = Mapping[Command] extends string ? ReceiveCommands[Mapping[Command]] : Mapping[Command]; export type GenericNotify = {[key: string]: any};