export function result(promise: Promise): Promise> { return promise.then( (value) => ({ ok: true, value }), (error) => ({ ok: false, error }) ); } export type Result = ResultOk | ResultError; interface ResultOk { ok: true; value: T; } interface ResultError { ok: false; error: Error; } export type UnwrapPromise = T extends Promise ? U : T;