import { BrandAndFlavorTypeTagUniqueSymbol } from "./BrandAndFlavorTypeTagUniqueSymbol.js";
/**
* Branding is a Type level concept to create "nominal types".
*
* Alternatively, see `Flavoring` type, it is a less strict "Branded type"
*
* It works by combining opaque types with primitive types (`string`, `number`)
* to "brand" the primitive type.
*
* This means that
* 1. Branded types are incompatible with each other where one branded type
* cannot be assigned to another branded type.
* 1. Unlike flavored types, primitives cannot be treated as the branded type
* until it is validated and type casted, which means all values of the branded
* type has been validated to be of that type as there cannot be implicit
* conversions, which is why this is a "strict flavored type".
*
* References:
* 1.
* 1.
*/
export interface Branding {
readonly [BrandAndFlavorTypeTagUniqueSymbol]: Brand;
}
/**
* See the `Branding` type for details.
*/
export type MakeBranded = TypeToBrand & Branding;
/**
* Create strong 'branded' string, i.e. implicit string to branded type
* conversion not allowed.
*/
export type MakeBrandedString = MakeBranded;
/**
* Create strong 'branded' number, i.e. implicit number to branded type
* conversion not allowed.
*/
export type MakeBrandedNumber = MakeBranded;
//# sourceMappingURL=Brand.d.ts.map