import { ClassPrototype, MapToComponentFieldOptions } from '../types/decorator.type';
import { VegaSlimmer } from '../../decorators/vega-slimmer';
export declare type DynamicFieldMapEntry<T, U> = {
  mapFrom: PropertyKeysOf<T>;
  mapTo: PropertyKeysOf<U>;
} & Exclude<MapToComponentFieldOptions, 'componentFieldName'>;
export declare type DynamicMethodMapEntry<T, U> = {
  mapFrom: MethodKeysOf<T>;
  mapTo: MethodKeysOf<U>;
};
export declare type MethodKeysOf<T> = {
  [K in keyof T]: T[K] extends (...args: any[]) => any ? K : never;
}[keyof T];
export declare type PropertyKeysOf<T> = {
  [K in keyof T]: T[K] extends (...args: any[]) => any ? never : K;
}[keyof T];
/**
 * The `createDynamicSlimmer` function creates an instance of a dynamically generated class based on
 * mappings provided.
 *
 * @param mapFromClass - The `mapFromClass` parameter is the class prototype from which you want to
 * create a dynamic slimmer instance. It represents the class that you want to map from.
 * @param mapToClass - The `mapToClass` parameter is the class prototype that you want to create an
 * instance of. It represents the class that you want to map the properties and methods from
 * `mapFromClass` to.
 * @param {DynamicFieldMapEntry<T, U>[]} fieldsMap - An array of objects that define the mapping
 * between fields of the `mapFromClass` class and the `mapToClass` class. Each object in the array
 * should have the following properties:
 * @param {DynamicMethodMapEntry<T, U>[]} methodsMap - `methodsMap` is an array of
 * `DynamicMethodMapEntry` objects. Each `DynamicMethodMapEntry` object represents a mapping between a
 * method in the `mapFromClass` class and a method in the `mapToClass` class.
 * @param {unknown[]} initDatas - An array of unknown values that will be passed as arguments to the
 * constructor of the dynamically created class.
 * @returns The function `createDynamicSlimmer` returns an instance of the class
 * `mapFromClass.prototype[key]`, which is an instance of the dynamically created class.
 */
export declare function createDynamicSlimmer<T, U extends VegaSlimmer>(mapFromClass: ClassPrototype<T>, mapToClass: ClassPrototype<U>, fieldsMap?: DynamicFieldMapEntry<T, U>[], methodsMap?: DynamicMethodMapEntry<T, U>[], initDatas?: unknown[]): U;
