diff --git a/src/objects.ts b/src/objects.ts index 9e589fc..d45e6b8 100644 --- a/src/objects.ts +++ b/src/objects.ts @@ -1,8 +1,16 @@ import type * as FS from 'fs'; -export function filterObject(object: T, ...keys: K[]): Pick { - const entries = <[K, T[K]][]>Object.entries(object); - return >Object.fromEntries(entries.filter(([key]) => keys.includes(key))); +export function filterObject(object: O, predicate: (key: keyof O, value: O[keyof O]) => boolean): R { + const entries = <[keyof O, O[keyof O]][]>Object.entries(object); + return Object.fromEntries(entries.filter(([key, value]) => predicate(key, value))); +} + +export function pick(object: T, ...keys: K[] | K[][]): Pick { + return filterObject>(object, (key: K) => keys.flat().includes(key)); +} + +export function omit(object: T, ...keys: K[] | K[][]): Omit { + return filterObject>(object, (key: K) => !keys.flat().includes(key)); } export function isJSON(str: string) {