import { Results, CustomizerParams, RawCloneOptions, FinalCloneOptions } from './service'; export interface CustParamsAccSoft extends CustomizerParams { accumulator: ACC & { [key: PropertyKey]: unknown; }; } export interface CustParamsAccStrict extends CustomizerParams { accumulator: ACC; } declare type CloneAccumulator = OPT extends { accumulator: Results['accumulator']; } ? OPT['accumulator'] & { [key: PropertyKey]: unknown; } : Results['accumulator']; declare type CloneResult = OPT extends { customizer: FinalCloneOptions['customizer']; } ? any : SOURCE; interface CloneVerboseReturnType extends Results { result: CloneResult; accumulator: CloneAccumulator; } export declare type CloneReturnType = OPT extends { output: 'verbose'; } ? CloneVerboseReturnType : SOURCE; export declare function clone(original: SOURCE, rawOptions?: OPT): CloneReturnType; export {};