import { ClassElementMetadata } from '../models/ClassElementMetadata';
import { ManagedClassElementMetadata } from '../models/ManagedClassElementMetadata';
import { MaybeClassElementMetadata } from '../models/MaybeClassElementMetadata';
import { MaybeManagedClassElementMetadata } from '../models/MaybeManagedClassElementMetadata';
type Or<T extends unknown[]> = T extends [infer First, ...infer Rest] ? First | Or<Rest> : never;
type BuildDefaultMetadataFunction<TParams extends unknown[][], TResult> = TParams extends [
    infer First extends unknown[],
    ...infer Rest extends unknown[][]
] ? ((...params: First) => TResult) & BuildDefaultMetadataFunction<Rest, TResult> : (...params: any[]) => TResult;
type BuildMetadataFromMaybeManagedMetadataFunction<TParams extends unknown[][], TResult> = TParams extends [
    infer First extends unknown[],
    ...infer Rest extends unknown[][]
] ? ((metadata: MaybeManagedClassElementMetadata | ManagedClassElementMetadata, ...params: First) => TResult) & BuildMetadataFromMaybeManagedMetadataFunction<Rest, TResult> : (metadata: MaybeManagedClassElementMetadata | ManagedClassElementMetadata, ...params: any[]) => TResult;
export declare function buildClassElementMetadataFromMaybeClassElementMetadata<TParams extends unknown[][]>(buildDefaultMetadata: BuildDefaultMetadataFunction<TParams, ClassElementMetadata>, buildMetadataFromMaybeManagedMetadata: BuildMetadataFromMaybeManagedMetadataFunction<TParams, ClassElementMetadata>): (...params: Or<TParams>) => (metadata: MaybeClassElementMetadata | undefined) => ClassElementMetadata;
export {};
//# sourceMappingURL=buildClassElementMetadataFromMaybeClassElementMetadata.d.ts.map