export declare type $Nominal = $Type & ((value: T) => Nominal); export declare function $nominal(id: I, parent?: $Nominal | null | undefined, generics?: $Type[] | null | undefined): () => $Nominal; export declare interface $Type { type?: Brand & T; id: I; parent?: $Type | null | undefined; generics?: $Type[] | null | undefined; } export declare function $type(id: I, parent?: $Type | null | undefined, generics?: $Type[] | null | undefined): $Type; export declare type Brand = { [id]?: I; }; declare const id: unique symbol; export declare type InferType = Exclude; export declare function is(value: any, type: T): value is InferType; export declare function isType(a: $Type, b: $Type): boolean; export declare type Nominal = Brand & T & { $type: $Type; }; export declare type Unbrand = T extends Brand & infer U ? U : T; export { }