import { RawParams } from '../params/interface';
import { ParamType } from './paramType';
import { StateDeclaration } from '../state';
import { UrlConfig } from '../url';
/** @internalapi */
declare enum DefType {
    PATH = 0,
    SEARCH = 1,
    CONFIG = 2
}
export { DefType };
/** @internalapi */
export declare class Param {
    id: string;
    type: ParamType;
    location: DefType;
    isOptional: boolean;
    dynamic: boolean;
    raw: boolean;
    squash: boolean | string;
    replace: [{
        to: any;
        from: any;
    }];
    inherit: boolean;
    array: boolean;
    config: any;
    /** Cache the default value if it is a common value */
    _defaultValueCache: {
        defaultValue: any;
    };
    static values(params: Param[], values?: RawParams): RawParams;
    /**
     * Finds [[Param]] objects which have different param values
     *
     * Filters a list of [[Param]] objects to only those whose parameter values differ in two param value objects
     *
     * @param params: The list of Param objects to filter
     * @param values1: The first set of parameter values
     * @param values2: the second set of parameter values
     *
     * @returns any Param objects whose values were different between values1 and values2
     */
    static changed(params: Param[], values1?: RawParams, values2?: RawParams): Param[];
    /**
     * Checks if two param value objects are equal (for a set of [[Param]] objects)
     *
     * @param params The list of [[Param]] objects to check
     * @param values1 The first set of param values
     * @param values2 The second set of param values
     *
     * @returns true if the param values in values1 and values2 are equal
     */
    static equals(params: Param[], values1?: {}, values2?: {}): boolean;
    /** Returns true if a the parameter values are valid, according to the Param definitions */
    static validates(params: Param[], values?: RawParams): boolean;
    constructor(id: string, type: ParamType, location: DefType, urlConfig: UrlConfig, state: StateDeclaration);
    isDefaultValue(value: any): boolean;
    /**
     * [Internal] Gets the decoded representation of a value if the value is defined, otherwise, returns the
     * default value, which may be the result of an injectable function.
     */
    value(value?: any): any;
    isSearch(): boolean;
    validates(value: any): boolean;
    toString(): string;
}
