From 831001a9c5e246aea4d6db3e0d88b45c3f5bd9c8 Mon Sep 17 00:00:00 2001 From: Jerko Steiner Date: Wed, 3 Apr 2019 18:02:36 +0800 Subject: [PATCH] Add createFilterProps --- packages/common/src/filterProps.test.ts | 35 +++++++++++++++++++++++++ packages/common/src/filterProps.ts | 8 ++++++ packages/common/src/index.ts | 1 + 3 files changed, 44 insertions(+) create mode 100644 packages/common/src/filterProps.test.ts create mode 100644 packages/common/src/filterProps.ts diff --git a/packages/common/src/filterProps.test.ts b/packages/common/src/filterProps.test.ts new file mode 100644 index 0000000..ac696e5 --- /dev/null +++ b/packages/common/src/filterProps.test.ts @@ -0,0 +1,35 @@ +import {createFilterProps} from './filterProps' + +interface IEntity { + readonly id: number +} + +interface IPerson { + readonly firstName: string + readonly lastName: string +} + +interface IPersonEntity extends IEntity, IPerson {} + +describe('filterProps', () => { + + const p: IPersonEntity = { + id: 1, + firstName: 'John', + lastName: 'Smith', + } + + const filterProps = createFilterProps({ + firstName: true, + lastName: true, + }) + + it('picks only relevant props', () => { + const person = filterProps(p) + expect(person).toEqual({ + firstName: 'John', + lastName: 'Smith', + }) + }) + +}) diff --git a/packages/common/src/filterProps.ts b/packages/common/src/filterProps.ts new file mode 100644 index 0000000..67cbbd8 --- /dev/null +++ b/packages/common/src/filterProps.ts @@ -0,0 +1,8 @@ +export function createFilterProps(schema: Record) { + return function filterProps(item: U): T { + return Object.keys(schema).reduce((obj: T, key) => { + obj[key as keyof T] = item[key as keyof T] + return obj + }, {} as T) + } +} diff --git a/packages/common/src/index.ts b/packages/common/src/index.ts index 7e57cae..23219da 100644 --- a/packages/common/src/index.ts +++ b/packages/common/src/index.ts @@ -10,6 +10,7 @@ export * from './IUser' export * from './IUserInTeam' export * from './IUserTeam' export * from './URLFormatter' +export * from './filterProps' export * from './indexBy' export * from './types' export * from './without'