Skip to content

Function: fromThrowable() ​

Call Signature ​

fromThrowable<FnReturn, CatchReturn, Args>(fn, onErr): (...args) => Result<FnReturn | UnwrapOk<CatchReturn>, InferValueAsErr<CatchReturn>>

Defined in: index.ts:522

Converts a function that might throw into a function that returns Results. Useful for wrapping existing throwing functions to work with Result-based error handling.

Type Parameters ​

FnReturn ​

FnReturn

The return type of the original function

CatchReturn ​

CatchReturn

The type returned by the catch handler

Args ​

Args extends unknown[] = []

The argument types of the function

Parameters ​

fn ​

(...args) => NonPromise<FnReturn>

The function that might throw

onErr ​

(error) => NonPromise<CatchReturn>

Value or function to handle caught errors

Returns ​

A new function that returns Results instead of throwing

(...args): Result<FnReturn | UnwrapOk<CatchReturn>, InferValueAsErr<CatchReturn>>

Parameters ​

args ​

...Args

Returns ​

Result<FnReturn | UnwrapOk<CatchReturn>, InferValueAsErr<CatchReturn>>

Example ​

typescript
const safeParse = fromThrowable(
  (input: string) => JSON.parse(input),
  (error) => `Parse error: ${error.message}`
);

safeParse('{"valid": true}'); // Ok<{valid: boolean}>
safeParse('invalid json'); // Err<string>

const safeDivide = fromThrowable(
  (a: number, b: number) => { if (b === 0) throw new Error(); return a / b; },
  "Division error"
);

safeDivide(10, 2); // Ok<number>
safeDivide(10, 0); // Err<"Division error">

Call Signature ​

fromThrowable<FnReturn, CatchReturn, Args>(fn, onErr): (...args) => Result<FnReturn | UnwrapOk<CatchReturn>, InferValueAsErr<CatchReturn>>

Defined in: index.ts:526

Converts a function that might throw into a function that returns Results. Useful for wrapping existing throwing functions to work with Result-based error handling.

Type Parameters ​

FnReturn ​

FnReturn

The return type of the original function

CatchReturn ​

CatchReturn

The type returned by the catch handler

Args ​

Args extends unknown[] = []

The argument types of the function

Parameters ​

fn ​

(...args) => NonPromise<FnReturn>

The function that might throw

onErr ​

NonPromise<CatchReturn>

Value or function to handle caught errors

Returns ​

A new function that returns Results instead of throwing

(...args): Result<FnReturn | UnwrapOk<CatchReturn>, InferValueAsErr<CatchReturn>>

Parameters ​

args ​

...Args

Returns ​

Result<FnReturn | UnwrapOk<CatchReturn>, InferValueAsErr<CatchReturn>>

Example ​

typescript
const safeParse = fromThrowable(
  (input: string) => JSON.parse(input),
  (error) => `Parse error: ${error.message}`
);

safeParse('{"valid": true}'); // Ok<{valid: boolean}>
safeParse('invalid json'); // Err<string>

const safeDivide = fromThrowable(
  (a: number, b: number) => { if (b === 0) throw new Error(); return a / b; },
  "Division error"
);

safeDivide(10, 2); // Ok<number>
safeDivide(10, 0); // Err<"Division error">

Call Signature ​

fromThrowable<FnReturn, CatchReturn, Args>(fn, onErr): (...args) => Promise<Result<FnReturn | UnwrapOk<CatchReturn>, InferValueAsErr<CatchReturn>>>

Defined in: index.ts:530

Converts a function that might throw into a function that returns Results. Useful for wrapping existing throwing functions to work with Result-based error handling.

Type Parameters ​

FnReturn ​

FnReturn

The return type of the original function

CatchReturn ​

CatchReturn

The type returned by the catch handler

Args ​

Args extends unknown[] = []

The argument types of the function

Parameters ​

fn ​

(...args) => OrPromise<FnReturn>

The function that might throw

onErr ​

OrFunction<OrPromise<CatchReturn>, [unknown]>

Value or function to handle caught errors

Returns ​

A new function that returns Results instead of throwing

(...args): Promise<Result<FnReturn | UnwrapOk<CatchReturn>, InferValueAsErr<CatchReturn>>>

Parameters ​

args ​

...Args

Returns ​

Promise<Result<FnReturn | UnwrapOk<CatchReturn>, InferValueAsErr<CatchReturn>>>

Example ​

typescript
const safeParse = fromThrowable(
  (input: string) => JSON.parse(input),
  (error) => `Parse error: ${error.message}`
);

safeParse('{"valid": true}'); // Ok<{valid: boolean}>
safeParse('invalid json'); // Err<string>

const safeDivide = fromThrowable(
  (a: number, b: number) => { if (b === 0) throw new Error(); return a / b; },
  "Division error"
);

safeDivide(10, 2); // Ok<number>
safeDivide(10, 0); // Err<"Division error">