首页 > 解决方案 > 根据键列表从对象中选择属性

问题描述

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

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'>

我怎样才能做到这一点?

我试图在这个片段中实现这个功能,但显然我没有从正确的角度来解决这个问题。

标签: typescript

解决方案


在这里你有:

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')

操场


推荐阅读