const saveFunctionCall = <T>(fn: () => T): {
	ok: boolean, 
	error: Error | null, 
	value: T | null
} => {
    let ok = false;
    let error: Error | null = null;
    let value: T | null = null;
 
    try {
        value = fn();
        ok = true;
    } catch (e: unknown | Error) {
        error = e as Error;
    }
 
    return {ok, error, value}
};
 

Example

function add(a: number, b: number): number {
    return a + b;
}
 
const {ok, error, value} = saveFunctionCall<number>(() => add(1, 1));
 
if(ok) {
    console.log(value);
} else {
    console.trace(error);
}