/** * PickByType * @desc From `T` pick a set of properties by value matching `ValueType`. * Credit: [Piotr Lewandowski](https://medium.com/dailyjs/typescript-create-a-condition-based-subset-types-9d902cea5b8c) * @example * type Props = { req: number; reqUndef: number | undefined; opt?: string; }; * * // Expect: { req: number } * type Props = PickByType; * // Expect: { req: number; reqUndef: number | undefined; } * type Props = PickByType; */ export type PickByType = Pick< T, { [Key in keyof T]-?: T[Key] extends ValueType ? Key : never }[keyof T] >;