lodash
has the pick function which is used as follows:
var object = { 'a': 1, 'b': '2', 'c': 3 };
_.pick(object, ['a', 'c']);
// => { 'a': 1, 'c': 3 }
I would like to write a type-safe version of this in typescript.
Usage of this function should be
pick(object, "a", "b")
The goal is to conserve type safety.
Is this possible to achieve?
Sounds like you might be looking for the Pick type. Would something like this work for you?
function pick<T, K extends keyof T>(obj: T, ...keys: K[]): Pick<T, K> {
const ret: any = {};
keys.forEach(key => {
ret[key] = obj[key];
})
return ret;
}
const o = {a: 1, b: '2', c: 3}
const picked = pick(o, 'b', 'c');
picked.a; // not allowed
picked.b // string
picked.c // number