import type { AnyTypeValidation, TypeValidation } from '@altostra/type-validations';
/**
 * An object representing parameterized property
 */
export interface Parameter<T> {
    /**
     * The parameter name
     */
    $param$: string;
    /**
     * The default value.
     */
    defaultValue: T;
    /**
     * Specify `true` to override the value in the blueprint even if
     * the blueprint already has a value
     */
    overrideDefault?: true;
}
/**
 * Returns a validators that validates if a value is parameter
 * @param valueValidator Validator that validates the underlying property type
 */
export declare function parameterOf<T>(valueValidator: AnyTypeValidation<T>): TypeValidation<Parameter<T>>;
export declare const isParameter: TypeValidation<Parameter<unknown>>;
export declare type ParameterizedProp<T> = Parameter<T> | T;
/**
 * Returns a validators that validates if a value is parameter
 * @param valueValidator Validator that validates the underlying property type
 */
export declare function parameterizedPropOf<T>(valueValidator: AnyTypeValidation<T>): TypeValidation<ParameterizedProp<T>>;
export declare type ParameterizedValue<T> = ParameterizedProp<T> | (T extends object ? Parameterized<T> : ParameterizedProp<T>);
export declare type Parameterized<T extends object> = {
    [K in keyof T]: ParameterizedValue<T[K]>;
};
