import { BreezeEnum } from './enum';
/** @hidden @internal */
export interface IParamContext {
    typeName?: string;
    type?: Function;
    prevContext?: IParamContext;
    msg?: string | ((context: IParamContext, v: any) => string);
    mustNotBeEmpty?: boolean;
    enumType?: BreezeEnum;
    propertyName?: string;
    allowNull?: boolean;
    fn?(context: IParamContext, v: any): boolean;
}
/** @hidden @internal */
export interface IConfigParam {
    config: any;
    params: Param[];
    whereParam: (propName: string) => Param;
}
/** @hidden @internal */
export declare class Param {
    v: any;
    name: string;
    defaultValue: any;
    parent: IConfigParam;
    /** @hidden @internal */
    _context: IParamContext;
    /** @hidden @internal */
    _contexts: IParamContext[];
    constructor(v: any, name: string);
    isObject(): Param;
    isBoolean(): Param;
    isString(): Param;
    isNumber(): Param;
    isFunction(): Param;
    isNonEmptyString(): Param;
    isTypeOf(typeName: string): Param;
    isInstanceOf(type: Function, typeName?: string): Param;
    hasProperty(propertyName: string): Param;
    isEnumOf(enumType: any): Param;
    isRequired(allowNull?: boolean): Param;
    isOptional(): Param;
    isNonEmptyArray(): Param;
    isArray(mustNotBeEmpty?: boolean): Param;
    or(): this;
    check(defaultValue?: any): any;
    /** @hidden @internal */
    _addContext(context: IParamContext): Param;
    getMessage(): string;
    withDefault(defaultValue: any): this;
    whereParam(propName: string): Param;
    applyAll(instance: any, checkOnly?: boolean): void;
    /** @hidden @internal */
    _applyOne: (this: Param, instance: any) => void;
    MESSAGE_PREFIX: string;
}
/** @hidden @internal */
export declare let assertParam: (v: any, name: string) => Param;
/** @hidden @internal */
export declare let assertConfig: (config: Object) => IConfigParam;
