import type { EntityClass, Dictionary, AutoPath } from '../typings';
import type { DeferMode } from '../enums';
export declare function Index<T extends object, H extends string>(options?: IndexOptions<T, H>): (target: T, propertyName?: (T extends EntityClass<unknown> ? undefined : keyof T) | undefined) => any;
export declare function Unique<T extends object, H extends string>(options?: UniqueOptions<T, H>): (target: T, propertyName?: (T extends EntityClass<unknown> ? undefined : keyof T) | undefined) => any;
type MaybeArray<T> = T | T[];
type Properties<T, H extends string> = MaybeArray<AutoPath<T, H>>;
interface BaseOptions<T, H extends string> {
    name?: string;
    properties?: (T extends EntityClass<infer P> ? Properties<P, H> : Properties<T, H>);
    options?: Dictionary;
    expression?: string;
}
export interface UniqueOptions<T, H extends string = string> extends BaseOptions<T, H> {
    deferMode?: DeferMode | `${DeferMode}`;
}
export interface IndexOptions<T, H extends string = string> extends BaseOptions<T, H> {
    type?: string;
}
export {};
