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 import("@augment-vir/common").IsNever<Extract<Selection[Key], true>> extends true ? never : Key]: Key; })[]>>;
