import type { Intersection, PlainObject } from '../../types/global';
type FalsyType = false | null | undefined;
export declare function strictObjectKeys<O extends object>(o: O): (keyof O)[];
export declare function objectsEqual(a: unknown, b: unknown): boolean;
export declare function objectsEqualWith<T extends PlainObject>(a: T, b: T, cmp: (a: T, b: T) => boolean): boolean;
/**
 * Merge objects from left to right, with left-most properties having highest precedent.
 *
 * NOTE: `undefined` values take lower priority than actual values irrespective of precedent.
 */
export declare function mergeDefaults<TSource extends PlainObject, TArgs extends (TSource | FalsyType)[]>(...sources: TArgs): Intersection<Exclude<TArgs[number], FalsyType>>;
export declare function mergeDefaults<TSameSource extends PlainObject>(...sources: (TSameSource | undefined)[]): TSameSource;
/**
 * Merge objects from left to right, with left-most properties having highest precedent.
 */
export declare function merge<TSource extends PlainObject, TArgs extends (TSource | FalsyType)[]>(...sources: TArgs): Intersection<Exclude<TArgs[number], FalsyType>>;
export declare function mergeArrayDefaults<T extends PlainObject>(dataArray: T[], ...itemDefaults: T[]): T[] | Intersection<Exclude<T, FalsyType>>[];
export declare function mapValues<T extends PlainObject, R>(object: T, mapper: (value: T[keyof T], key: keyof T, object: T) => R): Record<keyof T, R>;
export declare function without<T, K extends keyof T | string>(object: T | undefined, keys: readonly K[]): Omit<T, K>;
export declare function without(object: object | undefined, keys: readonly string[]): object;
export declare function pick<T, K extends keyof T>(object: T | undefined, keys: readonly K[]): Pick<T, K>;
export declare function pick(object: object | undefined, keys: readonly string[]): object;
export declare function every<T, K extends keyof T>(object: T | undefined, fn: (key: K, value: unknown) => boolean): boolean;
export declare function every(object: object | undefined, fn: (key: string, value: unknown) => boolean): boolean;
export declare function fromPairs<K extends string>(pairs?: Array<[K, any]>): Record<K, any>;
export declare function getPath(object: object, path: string | string[]): any;
export declare const SKIP_JS_BUILTINS: Set<string>;
export declare function setPath(object: object, path: string | string[], newValue: unknown): any;
export declare function partialAssign<T>(keysToCopy: (keyof T)[], target: T, source?: Partial<T>): T;
export declare function assignIfNotStrictlyEqual<T extends object>(target: T, source: T): T;
export declare function assignIfNotStrictlyEqual<T extends object>(target: T, source: T, keys: readonly string[]): T;
export declare function deepFreeze<T>(obj: T): T;
export declare function isObjectWithProperty<K extends string>(obj: unknown, key: K): obj is {
    [key in K]: unknown;
};
export declare function isObjectWithStringProperty<K extends string>(obj: unknown, key: K): obj is {
    [key in K]: string;
};
export {};
