UNPKG

type-brandy

Version:
17 lines (16 loc) 711 B
interface Flavoring<Kind extends string> { readonly __kind__?: Kind; } interface Branding<Base, Kind extends string> { readonly __base__: Base; readonly __kind__: Kind; } type Flavor<Base, Kind extends string> = Base & Flavoring<Kind>; type Brand<Base, Kind extends string> = Base & Branding<Base, Kind>; type AnyBrand = Brand<unknown, string>; type BaseOf<B extends AnyBrand> = B['__base__']; type Brander<Brand extends AnyBrand> = (value: BaseOf<Brand>) => Brand; type BrandValidator<Brand extends AnyBrand> = (value: BaseOf<Brand>) => void; declare function make<Brand extends AnyBrand>(validator?: BrandValidator<Brand>): Brander<Brand>; export type { Flavor, Brand, Brander }; export { make };