typesafe-ts API Documentation - v1.5.1
    Preparing search index...

    Function branded_error

    • Creates a branded error class factory. The returned class can be extended with custom error data.

      Type Parameters

      • const BrandString extends string

      Parameters

      • brand_string: BrandString

        A string literal used as the error name and brand identifier

      Returns new <ErrorData extends Record<string, unknown> = Record<string, never>>(
          args: [Record<string, never>] extends [ErrorData]
              ? void | { message?: string; cause?: unknown }
              : BrandedErrorCustomData<ErrorData>,
      ) => BrandedErrorType<BrandString, ErrorData>

      A class constructor that creates branded Error instances

      import { brand } from "typesafe-ts/brand";

      class TooShortError extends brand.Error("PasswordTooShort")<{ minLength: number }> {}
      class NoNumberError extends brand.Error("PasswordNoNumber") {}

      function validatePassword(password: string) {
      if (password.length < 8) return new TooShortError({ minLength: 8 });
      if (!/\d/.test(password)) return new NoNumberError();
      return null;
      }

      const validationError = validatePassword("short");
      if (!validationError) return;

      const errorBrand = validationError[brand.symbol];
      switch (errorBrand) {
      case "PasswordTooShort":
      // validationError is narrowed to TooShortError
      console.log(`Password must be at least ${validationError.minLength} characters`);
      break;
      case "PasswordNoNumber":
      // validationError is narrowed to NoNumberError
      console.log("Password must contain a number");
      break;
      }