import { Field } from './model.ts'; import { Eval } from './eval.ts'; export interface Type { [Type.kType]?: true; type: Field.Type; inner?: T extends (infer I)[] ? Type : Field.Type extends 'json' ? { [key in keyof T]: Type; } : never; array?: boolean; ignoreNull?: boolean; } export declare namespace Type { export const kType: unique symbol; export const Any: Type; export const Boolean: Type; export const Number: Type; export const String: Type; type Extract = T extends Type ? I : T extends Field ? I : T extends Field.Type ? I : T extends Eval.Term ? I : never; export type Object = Type; export const Object: (obj?: T) => Object<{ [K in keyof T]: Extract; }>; export type Array = Type; export const Array: (type?: Type) => Type.Array; export function fromPrimitive(value: T): Type; export function fromField(field: any): Type; export function fromTerm(value: Eval.Term, initial?: Type): Type; export function fromTerms(values: Eval.Term[], initial?: Type): Type; export function isType(value: any): value is Type; export function isArray(type?: Type): boolean | undefined; export function getInner(type?: Type, key?: string): Type | undefined; export function transform(value: any, type: Type, callback: (value: any, type?: Type) => T): any; export {}; }