declare function isNotNull(value: T): value is NonNullable; type DeepPartial = T extends object ? (T extends (infer E)[] ? T : { [P in keyof T]?: DeepPartial; }) : T; type DeepRequired = T extends object ? (T extends (infer E)[] ? T : { [P in keyof T]-?: DeepRequired; }) : T; /** * Assumes both objects are primitives, arrays, or non-function plain objects, and compares them deeply. * * Note that since they are assumed to be plain objects, this function does not compare prototypes. */ declare function deepPlainEquals(obj1: T, obj2: unknown, options?: { ignoreUndefinedValues?: boolean; }): obj2 is T; declare function isCloneable(obj: T): obj is Exclude; declare function shallowClone(obj: T): T; declare function deepPlainClone(obj: T): T; type DeepMerge = Omit & Omit & DeepMergeInner, Pick>; type DeepMergeInner = { [K in keyof U]-?: undefined extends U[K] ? K extends keyof T ? T[K] extends object ? Exclude extends object ? DeepMerge> : T[K] | Exclude : T[K] | Exclude : Exclude : K extends keyof T ? T[K] extends object ? U[K] extends object ? DeepMerge : U[K] : U[K] : U[K]; }; declare function deepMerge(baseObj: T, mergeObj: U): DeepMerge; declare function typedEntries(obj: T): [keyof T, T[keyof T]][]; declare function typedFromEntries(entries: (readonly [K, V])[]): Record; declare function typedKeys(obj: T): (keyof T)[]; declare function typedValues(obj: T): T[keyof T][]; declare function typedAssign(target: T, source: U): T & U; type FilterUndefined = { [k in keyof T as (undefined extends T[k] ? (T[k] extends undefined | void ? never : k) : never)]+?: T[k] & ({} | null); } & { [k in keyof T as (undefined extends T[k] ? never : k)]: T[k] & ({} | null); }; /** * Returns a new object with all undefined values removed. Useful when spreading optional parameters on an object, as * TypeScript's `Partial` type allows `undefined` values. */ declare function filterUndefined(obj: T): FilterUndefined; type FilterUndefinedOrNull = FilterUndefined<{ [k in keyof T]: null extends T[k] ? NonNullable | undefined : T[k]; }>; /** * Returns a new object with all undefined and null values removed. Useful when spreading optional parameters on an object, as * TypeScript's `Partial` type allows `undefined` values. */ declare function filterUndefinedOrNull(obj: T): FilterUndefinedOrNull; type DeepFilterUndefined = T extends object ? FilterUndefined<{ [K in keyof T]: DeepFilterUndefined; }> : T; declare function deepFilterUndefined(obj: T): DeepFilterUndefined; declare function pick(obj: T, keys: K[]): Pick; declare function omit(obj: T, keys: K[]): Omit; declare function split(obj: T, keys: K[]): [Pick, Omit]; declare function mapValues(obj: T, fn: (value: T extends (infer E)[] ? E : T[keyof T]) => U): Record; declare function sortKeys(obj: T): T; declare function deepSortKeys(obj: T): T; declare function set(obj: T, key: K, value: T[K]): void; declare function get(obj: T, key: K): T[K]; declare function getOrUndefined(obj: T, key: K): T[K] | undefined; declare function has(obj: T, key: K): obj is T & { [k in K]: unknown; }; declare function hasAndNotUndefined(obj: T, key: K): obj is T & { [k in K]: Exclude; }; declare function deleteKey(obj: T, key: K): void; declare function isObjectLike(value: unknown): value is object; export { type DeepFilterUndefined, type DeepMerge, type DeepPartial, type DeepRequired, type FilterUndefined, type FilterUndefinedOrNull, deepFilterUndefined, deepMerge, deepPlainClone, deepPlainEquals, deepSortKeys, deleteKey, filterUndefined, filterUndefinedOrNull, get, getOrUndefined, has, hasAndNotUndefined, isCloneable, isNotNull, isObjectLike, mapValues, omit, pick, set, shallowClone, sortKeys, split, typedAssign, typedEntries, typedFromEntries, typedKeys, typedValues };