Skip to main content

brand

Creates a branded clone of the given schema. This is useful if you want to "disable" the structural typing behavior of TypeScript, and ensure that a value has been parsed by a specific schema. Most likely, you'll want to use this together with custom schemas.

Example

import { brand, string } from "@sodd/core";

const email = /* custom email schema creator, see separate guide */

const emailSchema = brand(email(), "email");
type Email = Infer<typeof emailSchema>;

const sendSpam = (email: Email) => { /* ... */};

const maybeEmail: string = /* some string from some source that may or may not be a valid email address */

sendSpam(maybeEmail) // 🚨 => Argument of type 'string' is not assignable to parameter of type 'Brand<string, "email">'

const emailResult = emailSchema.parse("[email protected]");

if (emailResult.ok) {
sendSpam(emailResult.data) // ✅
}

Issue types

Any issues the given schema may produce.