根据键列表从对象中选择属性

时间:2021-03-10 17:49:23

标签: typescript

我有一个具有以下形状的对象:

const belongings = {
  car: {wheels:4},
  house: {size:88},
  guitar: {brand:'gibson'}
};


type Belongings = typeof belongings

我想创建一个执行以下操作的函数:

selectBelongings('car', 'guitar') // returns an object of type Pick<Belongings, 'car' | 'guitar'>

我怎样才能做到这一点?

我已经尝试在 this snippet 中实现该函数,但显然我没有从正确的角度解决问题。

1 个答案:

答案 0 :(得分:1)

这里有:

const belongings = {
  car: { wheels: 4 },
  house: { size: 88 },
  guitar: { brand: 'gibson' }
};

type Belongings = typeof belongings

const selectBelongings = <T extends keyof Belongings>(...keys: readonly T[]) =>
  keys.reduce((acc, elem) => ({
    ...acc,
    [elem]: belongings[elem]
  }), {} as Pick<Belongings, T>)

const result = selectBelongings('car', 'house')

Playground