import { MemberDecorator } from '@abraham/reflection'; import { MetadataOrMetadataArray } 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; export declare function tagParameter(annotationTarget: DecoratorTarget, parameterName: string | symbol | undefined, parameterIndex: number, metadata: MetadataOrMetadataArray): void; export declare function tagProperty(annotationTarget: DecoratorTarget, propertyName: string | symbol, metadata: MetadataOrMetadataArray): void; export declare function createTaggedDecorator(metadata: MetadataOrMetadataArray): (target: DecoratorTarget, targetKey?: string | symbol | undefined, indexOrPropertyDescriptor?: number | TypedPropertyDescriptor | undefined) => void; /** * Allows VanillaJS developers to use decorators: * * @export * @param {((ClassDecorator | ParameterDecorator | MethodDecorator))} decorator * @param {*} target * @param {(number | string)} [parameterIndex] * @example * decorate(injectable("Foo", "Bar"), FooBar); * decorate(targetName("foo", "bar"), FooBar); * decorate(named("foo"), FooBar, 0); * decorate(tagged("bar"), FooBar, 1); */ export declare function decorate(decorator: ClassDecorator | ParameterDecorator | MethodDecorator | MemberDecorator, target: any, parameterIndex?: number | string): void; export {};