import { ObjectType, StructType, FieldDescriptors, SchemaField, FieldDescriptor, FieldInfo, TypeOf } from './schema'; import * as S from './schema'; export declare const field: (fieldInfo: T) => T; export declare const pickStruct: (Ctor: new () => T, keys: Keys) => { new (): { descriptors: Pick; __type: S.ShallowPrettier>>; }; create>(this: T_1, value: TypeOf): TypeOf; displayName?: string | undefined; namespace?: string | undefined; }; export declare const omitStruct: (Ctor: new () => T, keys: Keys) => { new (): { descriptors: Omit; __type: S.ShallowPrettier>>; }; create>(this: T_1, value: TypeOf): TypeOf; displayName?: string | undefined; namespace?: string | undefined; }; export type PickObject[]> = new () => { [K in Keys[number]]: T[K] extends FieldDescriptor ? T[K] : T[K] extends S.SchemaCtorInput ? T[K] : never; } & ObjectType; export declare const pickObject: []>(Ctor: new () => T, keys: Keys) => PickObject; export type OmitObject[]> = new () => { [K in keyof T as K extends Keys[number] | '__type' ? never : K]: T[K] extends FieldDescriptor ? T[K] : T[K] extends S.SchemaCtorInput ? T[K] : never; } & ObjectType; export declare const omitObject: []>(Ctor: new () => T, keys: Keys) => OmitObject; export type PickSchema = typeof pickObject & typeof pickStruct; export declare const pick: PickSchema; export type OmitSchema = typeof omitObject & typeof omitStruct; export declare const omit: OmitSchema; export declare const keyofStruct: (Ctor: new () => T) => (keyof T['descriptors'])[]; export declare const keyofObject: (Ctor: new () => T) => (keyof TypeOf)[]; export type KeyOfSchema = typeof keyofStruct & typeof keyofObject; export declare const keyof: KeyOfSchema; export type SchemaCtorFields = { [key: string]: S.FieldInfo; }; export declare const getSchemaCtorFields: (descriptors: S.FieldDescriptors) => SchemaCtorFields; export declare abstract class PartialType extends S.Schema { __type: Partial>; abstract Item: S.SchemaCtor; } export declare const partialStruct: (Ctor: new () => T) => { new (): { Item: new () => T; __type: Partial<(new () => T) extends infer T_1 ? T_1 extends new () => T ? T_1 extends new () => { __type: infer U; } ? U : T_1 extends S.Schema ? T_1["__type"] : never : never : never>; }; create>(this: T_2, value: TypeOf): TypeOf; displayName?: string | undefined; namespace?: string | undefined; }; export type PartialObjectType = new () => { [K in keyof T as K extends '__type' ? never : K]?: T[K] extends FieldDescriptor ? T[K] : T[K] extends S.SchemaCtorInput ? T[K] : never; } & ObjectType; export declare const partialObject: (Ctor: new () => T) => PartialObjectType; export declare const partial: typeof partialStruct & typeof partialObject; export declare const requiredStruct: (Ctor: new () => T) => { new (): { descriptors: FieldDescriptors; __type: { [x: string]: never; }; }; create>(this: T_1, value: TypeOf): TypeOf; displayName?: string | undefined; namespace?: string | undefined; }; export type RequiredObjectType = new () => { [K in keyof T as K extends '__type' ? never : K]: T[K] extends FieldDescriptor ? T[K] : T[K] extends S.SchemaCtorInput ? T[K] : never; } & ObjectType; export declare const requiredObject: (Ctor: new () => T) => RequiredObjectType; export declare const required: typeof requiredStruct & typeof requiredObject;