import { Opt, val } from "./decorators";
import { VisitorExtension, VisitorInvocation } from "./invocation";
import { Class } from "./types";
import { partial, PartialValidator, Validator, validatorVisitor, ValidatorDecorator, RequiredValidator } from "./validation";
import { Result, ResultMessages } from "./visitor";
interface Option<T = any> {
    /**
     * Expected type
     */
    type: T;
    /**
     * List of visitor extension to extend TypedConverter internal process
     */
    visitors?: VisitorExtension[];
    /**
     * Top decorators of the type
     */
    decorators?: any[];
    /**
     * Root path
     */
    path?: string;
    /**
     * Guess single value as array element if expected type is array. Default false
     */
    guessArrayElement?: boolean;
}
/**
 * Convert value into type specified on configuration.
 * @param value
 * @param opt
 */
declare function convert<T = any>(value: any, option: Option<T> | T): T extends Class<infer R>[] ? Result<R[]> : T extends Class<infer R> ? Result<R> : Result<any>;
/**
 * Create type converter with specific configuration
 * @param option
 */
export default function createConverter<T = any>(option: Option<T> | T): (value: any) => T extends Class<infer R>[] ? Result<R[]> : T extends Class<infer R_1> ? Result<R_1> : Result<any>;
declare function createValidator<T>(option: T | Option<T>): (value: any) => T extends Class<infer R>[] ? Result<R[]> : T extends Class<infer R_1> ? Result<R_1> : Result<any>;
declare function validate<T>(value: any, option: Option<T> | T): T extends Class<infer R>[] ? Result<R[]> : T extends Class<infer R_1> ? Result<R_1> : Result<any>;
export { convert, Option, VisitorExtension, VisitorInvocation, Result, ResultMessages, partial, validatorVisitor, Validator, PartialValidator, val, Opt, validate, createValidator, ValidatorDecorator, RequiredValidator };
