Write a typesafe 'pick' function in typescript

醉酒当歌 提交于 2019-12-10 17:57:39

问题


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, o => o.a, o.b)

The goal is not to specify the same keys twice, and at the same time conserve type safety.

Is this possible to achieve?


回答1:


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


来源:https://stackoverflow.com/questions/47232518/write-a-typesafe-pick-function-in-typescript

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!