import 'reflect-metadata';
import { ParameterMetadata } from '../metadatas/index';
import { MetadataAdapter, MetadataExtends } from './DecoratorFactory';
import { Token } from '../../types';
/**
 * Parameter decorator.
 *
 * @export
 * @interface IParameterDecorator
 */
export interface IParameterDecorator<T extends ParameterMetadata> {
    (provider: Token<T>): ParameterDecorator;
    (metadata?: T): ParameterDecorator;
    (target: object, propertyKey: string | symbol, parameterIndex: number): void;
}
/**
 * create parameter decorator.
 *
 * @export
 * @template T metadata type.
 * @param {string} name decorator name.
 * @param {MetadataAdapter} [adapter]  metadata adapter
 * @param {MetadataExtends<T>} [metadataExtends] add extents for metadata.
 * @returns
 */
export declare function createParamDecorator<T extends ParameterMetadata>(name: string, adapter?: MetadataAdapter, metadataExtends?: MetadataExtends<T>): IParameterDecorator<T>;
