import { PropertyExtensionOptions } from './property-extension-options';
import { PropertyMetadata } from './property-metadata';
/**
 * Property extension metadata used by plugins to provide additional features for property metadata
 * using custom keys. Descendant classes are just wrappers to get convenient access to custom value map.
 *
 * @type {PropertyExtensionMetadata<TDeclaringObject, TObject, TPropertyExtensionOptions>}
 */
export declare abstract class PropertyExtensionMetadata<TDeclaringObject, TObject, TPropertyExtensionOptions extends PropertyExtensionOptions> {
    /**
     * Property metadata which we extend.
     *
     * @type {PropertyMetadata<TDeclaringObject, TObject>}
     */
    readonly propertyMetadata: PropertyMetadata<TDeclaringObject, TObject>;
    /**
     * Constructor.
     *
     * @param {PropertyMetadata<TDeclaringObject, TObject>} propertyMetadata Property metadata which we extend.
     * @param {TPropertyExtensionOptions} propertyExtensionOptions Property extension options.
     */
    constructor(propertyMetadata: PropertyMetadata<TDeclaringObject, TObject>, propertyExtensionOptions: TPropertyExtensionOptions);
    /**
     * Configures property extension.
     *
     * @param {TPropertyExtensionOptions} propertyExtensionOptions Property extension options.
     *
     * @returns {this} Property extension metadata.
     */
    abstract configure(propertyExtensionOptions: TPropertyExtensionOptions): this;
}
//# sourceMappingURL=property-extension-metadata.d.ts.map