Implement two of the most-used object utilities. Both should be **shallow,
immutable** transforms — never mutate the input.
pick<T, K extends keyof T>(obj: T, keys: K[]): Pick<T, K>
omit<T, K extends keyof T>(obj: T, keys: K[]): Omit<T, K>Rules
pick returns a new object containing only the listed own keys (skip keys not present on obj).
omit returns a new object containing every own key except the listedones.
In TypeScript, the real challenge is the type signature — make sure your
return type is narrowed via Pick / Omit so callers keep full inference.
Sample tests