import { Struct, StructType, StructContext } from './struct'; import { ObjectSchema, InferObjectStruct, Assign } from './xtras'; /** * Create a new struct that combines the properties properties from multiple * object structs. * * Like JavaScript's `Object.assign` utility. */ export declare function assign(Structs: [InferObjectStruct, InferObjectStruct]): InferObjectStruct>; export declare function assign(Structs: [InferObjectStruct, InferObjectStruct, InferObjectStruct]): InferObjectStruct, C>>; export declare function assign(Structs: [InferObjectStruct, InferObjectStruct, InferObjectStruct, InferObjectStruct]): InferObjectStruct, C>, D>>; export declare function assign(Structs: [InferObjectStruct, InferObjectStruct, InferObjectStruct, InferObjectStruct, InferObjectStruct]): InferObjectStruct, C>, D>, E>>; /** * Create a struct with dynamic, runtime validation. * * The callback will receive the value currently being validated, and must * return a struct object to validate it with. This can be useful to model * validation logic that changes based on its input. */ export declare function dynamic(fn: (value: unknown, ctx: StructContext) => Struct): Struct; /** * Create a struct with lazily evaluated validation. * * The first time validation is run with the struct, the callback will be called * and must return a struct object to use. This is useful for cases where you * want to have self-referential structs for nested data structures to avoid a * circular definition problem. */ export declare function lazy(fn: () => Struct): Struct; /** * Create a new struct based on an existing object struct, but excluding * specific properties. * * Like TypeScript's `Omit` utility. */ export declare function omit(struct: InferObjectStruct, keys: K[]): InferObjectStruct>; /** * Create a new struct based on an existing object struct, but with all of its * properties allowed to be `undefined`. * * Like TypeScript's `Partial` utility. */ export declare function partial(struct: InferObjectStruct | S): InferObjectStruct<{ [K in keyof S]: Struct | undefined>; }>; /** * Create a new struct based on an existing object struct, but only including * specific properties. * * Like TypeScript's `Pick` utility. */ export declare function pick(struct: InferObjectStruct, keys: K[]): InferObjectStruct>; /** * Create a new struct with a custom validation function. */ export declare function struct(name: string, validator: Struct['validator']): Struct;