Skip to content

Instantly share code, notes, and snippets.

@openam
Forked from t3dotgg/try-catch.ts
Last active March 24, 2025 19:11
Show Gist options
  • Select an option

  • Save openam/30cccf4f47d997cae02bed61b2ebbaf5 to your computer and use it in GitHub Desktop.

Select an option

Save openam/30cccf4f47d997cae02bed61b2ebbaf5 to your computer and use it in GitHub Desktop.
Theo's preferred way of handling try/catch in TypeScript
// Types for the result object with discriminated union
type Success<T> = [T, null]
type Failure<E> = [null, E]
type Result<T, E = Error> = Success<T> | Failure<E>;
// Main wrapper function
export async function tryCatch<T, E = Error>(
promise: Promise<T>,
): Promise<Result<T, E>> {
try {
const data = await promise;
return [ data, null ];
} catch (error) {
return [ null, error as E ];
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment