Skip to content

Getting Started with Typed Fetch

Typed Fetch is a type-safe HTTP client for TypeScript that never throws exceptions. Inspired by Go's error handling pattern, it's built on top of the native Fetch API.

What the Project Exports

From the main entry (@pbpeterson/typed-fetch):

  • typedFetch — The main function. Same signature as fetch(), returns { response, error } instead of throwing.
  • isHttpError — Type guard to check if a value is an HTTP error.
  • isNetworkError — Type guard to check if a value is a network error.
  • statusCodeErrorMap — Map of status codes to error class constructors.
  • httpErrors — Array of all 40 error class constructors.
  • Error classes — 40 individual HTTP error classes + NetworkError + BaseHttpError.
  • TypesClientErrors, ServerErrors, HttpErrors, TypedFetchError, TypedHeaders, StrictHeaders, HttpMethods.

From the errors subpath (@pbpeterson/typed-fetch/errors):

  • All error classes, individually tree-shakeable.

Why This Approach

  • Never Throws — Errors are returned as values, making handling explicit and predictable.
  • Type-Safe — Literal status types (404, not number), generic error bodies, discriminated unions.
  • Built on Native Fetch — Same API, same options, same types. Zero learning curve.
  • Tree-Shakeable — Import from ./errors to pull only the classes you need.
  • Type GuardsisHttpError() and isNetworkError() work reliably across package boundaries.

For installation and basic usage, see the next sections.

Released under the MIT License.