import type { TSchema, SchemaOptions } from '../schema/index'; import type { Static } from '../static/index'; import type { Evaluate, UnionToTuple } from '../helpers/index'; import type { TReadonly } from '../readonly/index'; import type { TOptional } from '../optional/index'; import { Kind } from '../symbols/index'; type ReadonlyOptionalPropertyKeys = { [K in keyof T]: T[K] extends TReadonly ? (T[K] extends TOptional ? K : never) : never; }[keyof T]; type ReadonlyPropertyKeys = { [K in keyof T]: T[K] extends TReadonly ? (T[K] extends TOptional ? never : K) : never; }[keyof T]; type OptionalPropertyKeys = { [K in keyof T]: T[K] extends TOptional ? (T[K] extends TReadonly ? never : K) : never; }[keyof T]; type RequiredPropertyKeys = keyof Omit | ReadonlyPropertyKeys | OptionalPropertyKeys>; type ObjectStaticProperties> = Evaluate<(Readonly>>> & Readonly>> & Partial>> & Required>>)>; type ObjectStatic = ObjectStaticProperties; }>; export type TPropertyKey = string | number; export type TProperties = Record; type TIsLiteralString = ([ Type ] extends [string] ? [string] extends [Type] ? false : true : false); type IsRequiredArrayLiteralConstant = (RequiredTuple extends [infer Left extends string, ...infer _ extends string[]] ? TIsLiteralString : false); type TRequiredArray ? never : Key]: Properties[Key]; }, RequiredUnion extends string = Extract, RequiredTuple extends string[] = UnionToTuple, Result extends string[] | undefined = (IsRequiredArrayLiteralConstant extends true ? RequiredTuple : string[] | undefined)> = Result; export type TAdditionalProperties = undefined | TSchema | boolean; export interface ObjectOptions extends SchemaOptions { /** Additional property constraints for this object */ additionalProperties?: TAdditionalProperties; /** The minimum number of properties allowed on this object */ minProperties?: number; /** The maximum number of properties allowed on this object */ maxProperties?: number; } export interface TObject extends TSchema, ObjectOptions { [Kind]: 'Object'; static: ObjectStatic; additionalProperties?: TAdditionalProperties; type: 'object'; properties: T; required: TRequiredArray; } /** `[Json]` Creates an Object type */ declare function _Object(properties: T, options?: ObjectOptions): TObject; /** `[Json]` Creates an Object type */ export declare var Object: typeof _Object; export {};