/**
 * @description
 * Assigns the values of all enumerable properties from one or more source objects to a target object.
 *
 * @param {object} target The target object to assign properties to
 * @param {...object} sources The source objects to assign properties from
 * @returns {object} The target object with assigned properties
 */
declare function assign<TObject, TSource>(target: TObject, source: TSource): TObject & TSource;
declare function assign<TObject, TSource1, TSource2>(target: TObject, source1: TSource1, source2: TSource2): TObject & TSource1 & TSource2;
declare function assign<TObject, TSource1, TSource2, TSource3>(target: TObject, source1: TSource1, source2: TSource2, source3: TSource3): TObject & TSource1 & TSource2 & TSource3;
declare function assign<TObject, TSource1, TSource2, TSource3, TSource4>(target: TObject, source1: TSource1, source2: TSource2, source3: TSource3, source4: TSource4): TObject & TSource1 & TSource2 & TSource3 & TSource4;
declare function assign<TObject>(target: TObject): TObject;
declare function assign(target: unknown, ...sources: any[]): any;

export { assign, assign as default };
