From 4fe5dd2cf9407bd1b24eb14ac5b2270522770157 Mon Sep 17 00:00:00 2001 From: MapleLeaf <19603573+itsMapleLeaf@users.noreply.github.com> Date: Wed, 29 Dec 2021 01:50:52 -0600 Subject: [PATCH] looser pick works better with object unions --- helpers/pick.ts | 10 ++++++---- helpers/types.ts | 6 ++++++ 2 files changed, 12 insertions(+), 4 deletions(-) diff --git a/helpers/pick.ts b/helpers/pick.ts index e921acb..9a0a7e0 100644 --- a/helpers/pick.ts +++ b/helpers/pick.ts @@ -1,11 +1,13 @@ +import type { LoosePick, UnknownRecord } from "./types" + // eslint-disable-next-line import/no-unused-modules -export function pick( +export function pick( object: T, - ...keys: K[] -): Pick { + keys: K[], +): LoosePick { const result: any = {} for (const key of keys) { - const value = object[key] + const value = (object as UnknownRecord)[key] if (value !== undefined) { result[key] = value } diff --git a/helpers/types.ts b/helpers/types.ts index d89c1c7..a7a0c06 100644 --- a/helpers/types.ts +++ b/helpers/types.ts @@ -4,3 +4,9 @@ export type MaybePromise = T | Promise export type ValueOf = Type extends ReadonlyArray ? Value : Type[keyof Type] + +export type UnknownRecord = Record + +export type LoosePick = { + [Key in Keys]: Shape extends Record ? Value : never +}