import { Either } from "./Either";
declare const nameProp = "__name";
type NameTag = {
    [key in typeof nameProp]: string;
};
export type ValidatorFn<T = any> = ((_: unknown) => _ is T) & NameTag;
export type Validator<T> = ((x: unknown) => Either<T>) & NameTag;
export type ValidatorType<V extends Validator<any>> = V extends Validator<infer T> ? T : never;
type ValidatorOptions = {
    decode?: boolean | ((_: string) => any);
};
export declare const from: <T>(name: string, validate: (_: unknown) => _ is T) => Validator<T>;
declare const _default: {
    from: <T>(name: string, validate: (_: unknown) => _ is T) => Validator<T>;
    any: Validator<any>;
    array: <T_1>(validate: Validator<T_1>) => ((x: unknown, { decode }?: ValidatorOptions) => Either<T_1[], Error>) & NameTag;
    boolean: Validator<boolean>;
    dateString: Validator<string>;
    dictionary: <T_2>(validate: Validator<T_2>) => Validator<Record<string, T_2>>;
    enum: <T_3>(allowed: T_3[], name?: string) => Validator<T_3>;
    nil: Validator<null | undefined>;
    number: Validator<number>;
    null: Validator<null>;
    nullable: <T_4>(type_: Validator<T_4>) => Validator<T_4 | null>;
    oneOf: <T_5>(...args: Validator<T_5>[]) => Validator<T_5>;
    optional: <T_6>(type_: Validator<T_6>) => Validator<T_6 | undefined>;
    record: <T_7 extends Record<string, any>>(schema: { [key in keyof T_7]: Validator<T_7[key]>; }) => Validator<T_7>;
    string: Validator<string>;
    undefined: Validator<undefined>;
    unknown: Validator<unknown>;
};
export default _default;
