export declare function removeEmptyValues<R extends {
    [k: string]: any;
}, I extends {
    [P in keyof R]: any | null | undefined;
}>(obj: I): R;
export declare function prefixKeys<T extends {
    [k: string]: any;
}>(obj: T, prefix?: string | null, removeEmpty?: boolean): T;
/**
 * Recursively (deeply) merges 2 object of the same type. It only merges plain object, not arrays.
 * It does not mutate the original object but may return references to (parts of the) original object.
 */
export declare function deepMerge<T extends {
    [k: string]: any;
}>(a: T, b: T): T;
export declare function isEmpty(obj: object): boolean;
export declare function chunkArray<T>(data: T[], chunkSize: number): T[][];
