import { BrandAndFlavorTypeTagUniqueSymbol } from "./BrandAndFlavorTypeTagUniqueSymbol";
/**
* Flavoring is a Type level concept to create "nominal types".
*
* Alternatively, see `Branding` type, it is a stricter "Flavored type"
*
* It works by combining opaque types with primitive types (`string`, `number`)
* to "flavor" the primitive type.
*
* This means that
* 1. Flavored types are incompatible with each other where one flavored type
* cannot be assigned to another flavored type.
* 1. Unlike branded types, flavored types allow implicit conversions of primitive
* type to flavored type without any validation or type casting, which means
* all primitive type can be treated as the flavored type easily, which is why
* this is a "weak branded type".
*
* References:
* 1.
* 1.
*/
export interface Flavoring {
readonly [BrandAndFlavorTypeTagUniqueSymbol]?: Flavor;
}
/**
* See the `Flavoring` type for details.
*/
export type MakeFlavored = TypeToFlavor & Flavoring;
/**
* Create weak 'flavored' string, i.e. implicit string to flavored type
* conversion allowed.
*/
export type MakeFlavoredString = MakeFlavored;
/**
* Create weak 'flavored' number, i.e. implicit number to flavored type
* conversion allowed.
*/
export type MakeFlavoredNumber = MakeFlavored;
//# sourceMappingURL=Flavor.d.ts.map