import * as V from './validate'; type Constructor = new (...args: any[]) => T; export { Validator, Primitive } from './validate'; export type Type = T extends V.Validator ? U : never; type OptionalKeys = { [K in keyof T]-?: T[K] & undefined extends never ? never : Required; }[keyof T]; export declare const t: { object>(schemas?: T): V.$object<{ [K_2 in keyof ({ [K_1 in OptionalKeys<{ [K in keyof T]: Type; }>]?: { [K in keyof T]: Type; }[K_1] | undefined; } & Omit<{ [K in keyof T]: Type; }, OptionalKeys<{ [K in keyof T]: Type; }>>)]: ({ [K_1 in OptionalKeys<{ [K in keyof T]: Type; }>]?: { [K in keyof T]: Type; }[K_1] | undefined; } & Omit<{ [K in keyof T]: Type; }, OptionalKeys<{ [K in keyof T]: Type; }>>)[K_2]; }>; array(schema?: T): V.$array; tuple(...schemas: T): V.$tuple<{ [K in keyof T]: Type; }>; literal(v: T): V.$literal; or(...schemas: T): V.$or[] ? I : unknown>; symbol(): V.$symbol; record>(schema: T): V.$record>; function(): V.$function; boolean(): V.$boolean; string(): V.$string; number(): V.$number; undefined(): V.$undefined; null(): V.$null; unknown(): V.$any; any(): V.$any; as(): V.$any; arraybuffer(): V.$arraybuffer; enum(...values: T): V.$enum; typedarray(ctor: Constructor): V.$typedarray; }; export declare function typeAsserts(validator: T, x: unknown, path?: string): asserts x is Type;