export type Result = | ([T] extends [never] ? { status: "success" } : { status: "success"; result: T }) | { status: "error"; error: Error }; export type MergeResults[]> = T extends readonly [ infer Head extends Result, ...infer Tail extends Result[], ] ? [Extract["result"], ...MergeResults] : []; export const mergeResults = []>( results: T, ): Result> => { for (const result of results) { if (result.status === "error") { return result; } } // @ts-ignore return { status: "success", result: results.map((result) => result.result) }; };