/** * Filter object, only including specific properties (Based on TypeScript Pick) * @param obj - Object to filter * @param keys - Keys to extract * @example * let obj = { a: 1, b: 2, c: '3' } // Type is { a: number, b: number, c: string } * obj = pick(obj, 'a', 'b') // Type is { a: number, c: string } */ export declare function pick(obj: T, ...keys: K[]): Pick; /** * Filter object, excluding specific properties (Based on TypeScript Pick) * @param obj - Object to filter * @param keys - Keys to exclude * @example * const obj = { a: 1, b: 2, c: '3' } // Type is { a: number, b: number, c: string } * const obj2 = omit(obj, 'a', 'c') // Type is { b: number } */ export declare function omit(obj: T, ...keys: K[]): Omit; /** * Fully typed Object.keys */ export declare const getKeys: (obj: T) => [keyof T]; /** * Verify that object has all provided keys * @param strict - Can *only* have the provided keys */ export declare const hasKeys: (o: object, keys: string[], strict?: boolean) => boolean; /** * Verify that object has all provided properties * @param strict - Can *only* have the provided properties */ export declare const hasProperties: (o: object, propNames: string[], strict?: boolean) => boolean; /** * Walks parent lineage and cascades properties * @param obj - target object * @param parentKey - key which points to parent object * @param prioritize - default: highest * @param useDeepMerge - Use deepMerge instead of overwriting (default: true) */ export declare function cascadeProperties(obj: T, parentKey: TParentKey, keys?: TKeys[], prioritize?: 'lowest' | 'highest', useDeepMerge?: boolean): Pick;