// type ConvertUndefined = OrUndefined<{ [K in keyof T as undefined extends T[K] ? K : never]-?: T[K] }> // type OrUndefined = { [K in keyof T]: T[K] | undefined } // type PickRequired = { [K in keyof T as undefined extends T[K] ? never : K]: T[K] } // type ConvertPick = ConvertUndefined & PickRequired /** Returns a shallowly cloned object with the provided keys omitted */ export const omit = (obj: Obj, keys: Keys[]): Omit => { return Object.keys(obj).reduce((acc, key: any) => { if (!keys.includes(key)) { acc[key] = (obj as any)[key] } return acc }, {} as any) }