import { interfaces } from "../interfaces/interfaces"; declare type Prototype = { [Property in keyof T]: T[Property] extends NewableFunction ? T[Property] : T[Property] | undefined; } & { constructor: NewableFunction; }; interface ConstructorFunction> { new (...args: unknown[]): T; prototype: Prototype; } export declare type DecoratorTarget = ConstructorFunction | Prototype; declare function tagParameter(annotationTarget: DecoratorTarget, parameterName: string | symbol | undefined, parameterIndex: number, metadata: interfaces.MetadataOrMetadataArray): void; declare function tagProperty(annotationTarget: DecoratorTarget, propertyName: string | symbol, metadata: interfaces.MetadataOrMetadataArray): void; declare function createTaggedDecorator(metadata: interfaces.MetadataOrMetadataArray): (target: DecoratorTarget, targetKey?: string | symbol | undefined, indexOrPropertyDescriptor?: number | TypedPropertyDescriptor | undefined) => void; declare function decorate(decorator: (DecoratorTarget | ParameterDecorator | MethodDecorator), target: any, parameterIndexOrProperty?: number | string): void; export { decorate, tagParameter, tagProperty, createTaggedDecorator };