UNPKG

object-shape-tester

Version:
48 lines (47 loc) 1.66 kB
import { type AnyObject } from '@augment-vir/common'; import { type TPick } from '@sinclair/typebox'; import { type ShapeInitSchema, type ShapeInitType } from '../shape/shape.js'; /** * Type helper for {@link pickShape} to ensure that the selection parameter doesn't include extra * invalid keys. * * @category Internal */ export type EnforceSelectionKeys<OriginalKeys extends PropertyKey, Selection extends Readonly<AnyObject>> = Readonly<{ [Key in keyof Selection]: Key extends OriginalKeys ? Selection[Key] : never; }>; /** * Creates a shape by picking specific keys off of another object shape. * * @category Shape * @example * * ```ts * import {pickShape, checkValidShape} from 'object-shape-tester'; * * const myShape = pickShape( * { * hi: '', * bye: -1, * }, * { * hi: true, * }, * ); * * checkValidShape( * { * hi: 'some value', * }, * myShape, * ); // `true` * checkValidShape( * { * hi: 'some value', * bye: 100, * }, * myShape, * ); // `false` * ``` */ export declare function pickShape<const OriginalShape extends object, const Selection extends Readonly<Partial<Record<keyof ShapeInitType<OriginalShape>, boolean>>>>(originalShape: OriginalShape, selection: Selection & EnforceSelectionKeys<keyof NoInfer<ShapeInitType<OriginalShape>>, NoInfer<Selection>>): import("../shape/shape.js").Shape<TPick<ShapeInitSchema<OriginalShape>, (keyof { [Key in keyof Selection as Selection[Key] extends true ? Key : true extends infer T ? T extends true ? T extends Selection[Key] ? Key : never : never : never]: Key; })[]>>;