Skip to content

Instantly share code, notes, and snippets.

@reinhrst
Created February 20, 2023 08:54
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save reinhrst/ae00182995771206ab76ad6dc613933f to your computer and use it in GitHub Desktop.
Save reinhrst/ae00182995771206ab76ad6dc613933f to your computer and use it in GitHub Desktop.
Typescript object pick and omit functions
// typescript versions of https://stackoverflow.com/a/56592365/1207489
const pick = <T extends {}, K extends keyof T>(obj: T, ...keys: K[]) => (
Object.fromEntries(
keys
.filter(key => key in obj)
.map(key => [key, obj[key]])
) as Pick<T, K>
);
const inclusivePick = <T extends {}, K extends (string | number | symbol)>(
obj: T, ...keys: K[]
) => (
Object.fromEntries(
keys
.map(key => [key, obj[key as unknown as keyof T]])
) as {[key in K]: key extends keyof T ? T[key] : undefined}
)
const omit = <T extends {}, K extends keyof T>(
obj: T, ...keys: K[]
) =>(
Object.fromEntries(
Object.entries(obj)
.filter(([key]) => !keys.includes(key as K))
) as Omit<T, K>
)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment