import { MergeSchemaParameters, SchemaParameters, SchemaResolveType, SchemaReturnType } from './io';
import FunctionType from './FunctionType';
export declare function either<A>(...candidates: [A]): FunctionType<SchemaReturnType<A>, SchemaParameters<A>>;
export declare function either<A, B>(...candidates: [A, B]): FunctionType<SchemaReturnType<A> | SchemaReturnType<B>, MergeSchemaParameters<SchemaParameters<A> | SchemaParameters<B>>>;
export declare function either<A, B, C>(...candidates: [A, B, C]): FunctionType<SchemaReturnType<A> | SchemaReturnType<B> | SchemaReturnType<C>, MergeSchemaParameters<SchemaParameters<A> | SchemaParameters<B> | SchemaParameters<C>>>;
export declare function either<A, B, C, D>(...candidates: [A, B, C, D]): FunctionType<SchemaReturnType<A> | SchemaReturnType<B> | SchemaReturnType<C> | SchemaReturnType<D>, MergeSchemaParameters<SchemaParameters<A> | SchemaParameters<B> | SchemaParameters<C> | SchemaParameters<D>>>;
export declare function either<A, B, C, D, E>(...candidates: [A, B, C, D, E]): FunctionType<SchemaReturnType<A> | SchemaReturnType<B> | SchemaReturnType<C> | SchemaReturnType<D> | SchemaReturnType<E>, MergeSchemaParameters<SchemaParameters<A> | SchemaParameters<B> | SchemaParameters<C> | SchemaParameters<D> | SchemaParameters<E>>>;
export declare function either<A, B, C, D, E, F>(...candidates: [A, B, C, D, E, F]): FunctionType<SchemaReturnType<A> | SchemaReturnType<B> | SchemaReturnType<C> | SchemaReturnType<D> | SchemaReturnType<E> | SchemaReturnType<F>, MergeSchemaParameters<SchemaParameters<A> | SchemaParameters<B> | SchemaParameters<C> | SchemaParameters<D> | SchemaParameters<E> | SchemaParameters<F>>>;
export declare function either<A, B, C, D, E, F, G>(...candidates: [A, B, C, D, E, F, G]): FunctionType<SchemaReturnType<A> | SchemaReturnType<B> | SchemaReturnType<C> | SchemaReturnType<D> | SchemaReturnType<E> | SchemaReturnType<F> | SchemaReturnType<G>, MergeSchemaParameters<SchemaParameters<A> | SchemaParameters<B> | SchemaParameters<C> | SchemaParameters<D> | SchemaParameters<E> | SchemaParameters<F> | SchemaParameters<G>>>;
export declare function either<A, B, C, D, E, F, G, H>(...candidates: [A, B, C, D, E, F, G, H]): FunctionType<SchemaReturnType<A> | SchemaReturnType<B> | SchemaReturnType<C> | SchemaReturnType<D> | SchemaReturnType<E> | SchemaReturnType<F> | SchemaReturnType<G> | SchemaReturnType<H>, MergeSchemaParameters<SchemaParameters<A> | SchemaParameters<B> | SchemaParameters<C> | SchemaParameters<D> | SchemaParameters<E> | SchemaParameters<F> | SchemaParameters<G> | SchemaParameters<H>>>;
export declare function merge<A>(...args: [A]): FunctionType<SchemaReturnType<A>, MergeSchemaParameters<SchemaParameters<A>>>;
export declare function merge<A, B>(...args: [A, B]): FunctionType<SchemaReturnType<A & B, SchemaResolveType<A> & SchemaResolveType<B>>, MergeSchemaParameters<SchemaParameters<A> & SchemaParameters<B>>>;
export declare function merge<A, B, C>(...args: [A, B, C]): FunctionType<SchemaReturnType<A & B & C, SchemaResolveType<A> & SchemaResolveType<B> & SchemaResolveType<C>>, MergeSchemaParameters<SchemaParameters<A> & SchemaParameters<B> & SchemaParameters<C>>>;
export declare function merge<A, B, C, D>(...args: [A, B, C, D]): FunctionType<SchemaReturnType<A & B & C & D, SchemaResolveType<A> & SchemaResolveType<B> & SchemaResolveType<C> & SchemaResolveType<D>>, MergeSchemaParameters<SchemaParameters<A> & SchemaParameters<B> & SchemaParameters<C> & SchemaParameters<D>>>;
export declare function merge<A, B, C, D, E>(...args: [A, B, C, D, E]): FunctionType<SchemaReturnType<A & B & C & D & E, SchemaResolveType<A> & SchemaResolveType<B> & SchemaResolveType<C> & SchemaResolveType<D> & SchemaResolveType<E>>, MergeSchemaParameters<SchemaParameters<A> & SchemaParameters<B> & SchemaParameters<C> & SchemaParameters<D> & SchemaParameters<E>>>;
export declare function merge<A, B, C, D, E, F>(...args: [A, B, C, D, E, F]): FunctionType<SchemaReturnType<A & B & C & D & E & F, SchemaResolveType<A> & SchemaResolveType<B> & SchemaResolveType<C> & SchemaResolveType<D> & SchemaResolveType<E> & SchemaResolveType<F>>, MergeSchemaParameters<SchemaParameters<A> & SchemaParameters<B> & SchemaParameters<C> & SchemaParameters<D> & SchemaParameters<E> & SchemaParameters<F>>>;
export declare function optional<F extends FunctionType, R = undefined>(validator: F, defaultValue?: R): FunctionType<ReturnType<F> | R, MergeSchemaParameters<Parameters<F> | [(undefined | null)?]>>;
export declare function strictOptional<F extends FunctionType, R = undefined>(validator: F, defaultValue?: R): FunctionType<ReturnType<F> | R, MergeSchemaParameters<Parameters<F> | [undefined?]>>;
