TypedError ⌨️💥

A better JavaScript Error for Node.js, Deno and the browser.

Built with ❤️ at Think-it.

Abstract

Error handling is a tough subject. And it's even more difficult when dealing with large projects. The JavaScript Error is a necessary component of the error handling story, but it's often too limited.

The main difficulty is categorizing errors; when building the main business logic of any project, it's common to encounter similar errors (e.g. duplicate entities, forbidden access, etc.), and relying on Error.prototype.message is quite restrictive.

TypedError aims to solve this issue, providing a extra TypedError.prototype.type. The type field is typed through TypeScript, allowing a smoother error handling story.

Usage

Node.js

Install via npm or yarn

npm install @think-it-labs/typed-error
yarn add @think-it-labs/typed-error

Deno

Import as ES module

import { TypedError } from "https://deno.land/x/typederror/mod.ts"

Then it's possible to create a custom Error class extending the TypedError

enum MyErrorType {
  Unknown,
  HTTP,
}

export class MyError extends TypedError<MyErrorType> {}

Now, during error handling code can inspect the type error and define behavior accordingly

import { MyError, MyErrorType } from "./my-error"

export function errorHandling(error: unknown) {
  if (error instanceof MyError) {
    switch (error.type) {
      case MyErrorType.HTTP: {
        // handle http errors
      }
      case MyErrorType.Unknown:
      default: {
        // red alert: unknown behavior
      }
    }
  }
}

License

TypedError is distributed under the terms of the MIT license.

See LICENSE for details.