A string literal used as the error name and brand identifier
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;
}
Creates a branded error class factory. The returned class can be extended with custom error data.