type Success = { readonly success: true; readonly data: TData; readonly error?: never; }; type Failure = { readonly success: false; readonly data?: never; readonly error: TError; }; export type Result = Success | Failure; export async function tryCatchAsync(fn: () => Promise): Promise> { try { const data = await fn(); return { success: true, data }; } catch (error) { return { success: false, error }; } } export function tryCatch(fn: () => T): Result { try { return { success: true, data: fn() }; } catch (error) { return { success: false, error }; } }