import type {PlainObject} from '../../models'; export function partial( value: unknown, keys: ValueKey[], omit: true, ): Omit; export function partial( value: unknown, keys: ValueKey[], omit: false, ): Pick; export function partial( value: unknown, providedKeys: ValueKey[], omit: boolean, ): Partial { if (typeof value !== 'object' || value === null) { return {} as Partial; } const keys = omit ? Object.keys(value) : Array.isArray(providedKeys) ? providedKeys : []; const {length} = keys; if (length === 0) { return omit ? (value as Partial) : ({} as Partial); } const partials: Partial = {}; for (let index = 0; index < length; index += 1) { const key = keys[index]; if (!(key in value)) { continue; } if (omit ? !providedKeys.includes(key as ValueKey) : true) { (partials as PlainObject)[key] = (value as PlainObject)[key]; } } return partials; }