/** * A strategy for cloning objects with `cloneDeep`. * * Methods **must** call the `track` function with the new parent * object **before** looping over the input object's * properties/elements for cloning purposes. This protects against * circular references. * * Methods may return the input object to indicate that cloning should * be skipped. * * Methods may return null to indicate that the default cloning logic * should be used. */ export interface CloningStrategy { cloneMap: (parent: Map, track: (newParent: Map) => Map, clone: (value: T) => T) => Map | null; cloneSet: (parent: Set, track: (newParent: Set) => Set, clone: (value: T) => T) => Set | null; cloneArray: (parent: readonly T[], track: (newParent: T[]) => T[], clone: (value: T) => T) => T[] | null; cloneObject: (parent: T, track: (newParent: T) => T, clone: (value: T) => T) => T | null; cloneOther: (parent: T, track: (newParent: T) => T, clone: (value: T) => T) => T | null; } export declare const DefaultCloningStrategy: CloningStrategy; /** * 深拷贝 * * 默认情况下,唯一被克隆的对象是普通对象、类实例、数组、`Set`实例和`Map`,`Date` * 其他的场景,通过第二个参数自定义Strategy,实现拷贝逻辑(copy Radashi) * * ```ts * const obj = { a: 1, b: { c: 2 } } * const clone = cloneDeep(obj) * ``` */ export declare function cloneDeep(root: T, customStrategy?: Partial): T; /** * @deprecated - 请使用cloneDeep * * 深拷贝(与cloneDeep完成相同,历史原因2个名字) * 默认情况下,唯一被克隆的对象是普通对象、类实例、数组、`Set`实例和`Map`,`Date` * 其他的场景,通过第二个参数自定义Strategy,实现拷贝逻辑 * * ```ts * const obj = { a: 1, b: { c: 2 } } * const clone = deepClone(obj) * ``` */ export declare const deepClone: typeof cloneDeep;