function omit, K extends keyof T> (obj: T, props: K[]): Omit function omit, K extends keyof T> (obj: T, ...props: K[]): Omit function omit, K extends keyof T> (obj: T, ...propsArg: K[] | [K[]]): Omit { let props: K[] if (propsArg.length === 1 && Array.isArray(propsArg[0])) { props = propsArg[0] } else { props = propsArg as K[] } const result = Object.fromEntries(Object.entries(obj).filter(([k]) => props.includes(k as K))) return result as Omit } export default omit