/** * Branded is a module to help you construct Branded types. * * @since 0.9.2 */ import { unsafeCoerce } from './function' /** * @since 0.9.2 * @category Type-level */ export type BrandOf = A extends Branded ? R : never /** * @since 0.9.2 * @category Type-level */ export type ValueOf = A extends infer E & { readonly __brand__: BrandOf } ? E : never /** * @since 0.9.2 * @category Model */ export type Branded = E & { readonly __brand__: A } /** * @since 0.9.2 * @category Constructor */ export const Branded = >() => >(e: E): Branded> => unsafeCoerce(e)