import { MergeRecursive, PartialRecursive } from './types'; import { Constructor } from './function'; export declare type AssignMode = 'of' | 'in'; export declare type ArrayMode = 'merge-recursive' | 'replace' | 'concat'; export declare type AssignOpts = Partial & { onlyExistingProp: boolean | { level: number; }; nonRecursivelyAssignableTypes: Iterable; array: ArrayMode | 'primitive'; object: 'own-properties' | 'all-prototype-chain'; }>; export declare class AssignOptions { assignMode: AssignMode; arrayMode: ArrayMode; depth: number; onlyExistingProp: { level: number; }; props: (string | symbol)[]; except: (string | symbol)[]; accept: (key: string | symbol, value: any) => boolean; transform: (key: string | symbol, value: any) => any; nonRecursivelyAssignableTypes: Set; constructor(options?: AssignOpts); } declare type UnionOfNonAssignOptions = T extends [infer Head, ...infer Tail] ? Head extends AssignOptions ? UnionOfNonAssignOptions : Head | UnionOfNonAssignOptions : never; declare type ReturnType = [R] extends [never] ? MergeRecursive> : R; export declare function assignRecursiveArray(args: T, options?: AssignOpts): ReturnType; export declare function assignRecursive(...args: T): ReturnType; declare type AssignOptsWithoutAssignMode = Omit; export declare function assignRecursiveInArray(args: T, options?: AssignOptsWithoutAssignMode): ReturnType; export declare function assignRecursiveIn(...args: T): ReturnType; export declare function assignDefaultOption(defaultOption: T, option: PartialRecursive, assignMode?: AssignOpts): T; export declare const deepCopy: (o: O, options?: AssignOptions) => O; export {};