TypeScript supports Pick
to allow you to get a "subset" object type of a given type, but there is no built-in Pick
for deeper nested fields.
If you have a function that takes a large object as argument, but you don't use all of its fields, you can use Pick
, Pick2
, Pick3
, etc to narrow down the input type to be only just what you need. This will make it easier to test your function, because when mocking the input object, you don't need to pass all fields of the "large" object.
Hi @staltz, your code really inspired me so I thought this was worth sharing.
It uses the technique you describe right above with a recursive mapped type that consumes the path.
The hard part was to get TypeScript to actually compute the mapped type deeply (doesn't by default).
And this opened the door to n-depth object traversing. I have then implemented
Merge
,Update
,Omit
at any depth (and without effort).I first wrote it as a recursive type (not mapped) then I found your code and re-wrote it to a mapped type. It improved performance by x6.
So I thanked you on the project's page. If you're interested, I would appreciate your feedback :)