import { MetadataExtends, ArgsIteratorAction } from '@tsdi/ioc';
import { FieldMetadata } from '../metadata';
/**
 * filed decorator type define.
 *
 * @export
 * @interface IFiledDecorator
 * @template T
 */
export interface IFiledDecorator<T extends FieldMetadata> {
    /**
     * Filed decorator.
     */
    (dbtype?: string, dbfield?: string, defaultValue?: any, required?: boolean): PropertyDecorator;
    /**
     * Filed decorator with metadata map.
     * @param {T} [metadata] define matadata map to resolve value to the property.
     */
    (metadata?: T): PropertyDecorator;
    /**
     * Filed decorator.
     */
    (target: object, propertyKey: string | symbol, descriptor?: TypedPropertyDescriptor<any>): void;
}
/**
 * create filed decorator.
 *
 * @export
 * @template T
 * @param {string} [decoratorName]
 * @param {MetadataAdapter} [actions]
 * @param {MetadataExtends<T>} [metaExtends]
 * @returns {IFiledDecorator<T>}
 */
export declare function createFieldDecorator<T extends FieldMetadata>(decoratorName?: string, actions?: ArgsIteratorAction<T>[], metaExtends?: MetadataExtends<T>): IFiledDecorator<T>;
/**
 *  Filed decorator.
 */
export declare const Field: IFiledDecorator<FieldMetadata>;
