import { ApplyUndefinedType } from './assert';
export declare function isObject(o: any): boolean;
export declare function hasFunction(o: object | any[], name: PropertyKey): boolean;
export declare function deepClone(o: A): A;
export declare function deepEqual(a: any, b: any): boolean;
export declare function replaceObject(dest: A, src: A): A;
export declare const SafeObjectOptions: {
throwError: boolean;
};
/**
* make a loss object, very forgiving
* */
export declare function createSafeObject(target?: object): any;
export declare const updateObject: (dest: T) => (x: U) => T & U;
export declare const isNull: (x: any) => boolean;
export declare function removeNull(o: A): A;
/**
* @param {any} o : value to be checked
* @param {boolean} skip : true will remove duplicated value silently;
* false will throw an error upon duplication
* @param {any} placeholder : custom value to replace duplicated object
* @param {function} mapper : optional map function
* @param {Set} visited : internal book keeping seen objects
* */
export declare function ensureNonCyclic(o: A, skip?: boolean, placeholder?: any, mapper?: (a: any) => any, visited?: Set): A;
export declare function deleteUndefined(o: ApplyUndefinedType): void;
/**
* to encode json data in csv-style
* i.e. only need to store the keys once for a large collection (e.g. Array / Set)
* */
export declare function objectToValues(o: T, keys?: Array): Array;
/**
* to decode json data from csv-style
* i.e. populate values and keys to a collection (e.g. Array / Set)
* */
export declare function valuesToObject(values: Array, keys: Array): T;
export declare function objectGetOrSetDefault(object: Record, key: K, f: () => V): V;
export declare function objectPick(object: T, keys: K[]): Pick;