import { EnumTypeComposer, SchemaComposer, ObjectTypeComposer, InterfaceTypeComposer, ObjectTypeComposerRelationOpts, ObjectTypeComposerFieldConfigDefinition, ObjectTypeComposerFieldConfigMapDefinition, ObjectTypeComposerFieldConfigAsObjectDefinition } from 'graphql-compose';
import type { Model } from 'mongoose';
import { ComposeWithMongooseOpts } from '../composeWithMongoose';
import { GraphQLObjectType } from 'graphql-compose/lib/graphql';
export interface ComposeWithMongooseDiscriminatorsOpts<TContext> extends ComposeWithMongooseOpts<TContext> {
    reorderFields?: boolean | string[];
}
export declare class DiscriminatorTypeComposer<TSource, TContext> extends ObjectTypeComposer<TSource, TContext> {
    discriminatorKey: string;
    opts: ComposeWithMongooseDiscriminatorsOpts<TContext>;
    childTCs: ObjectTypeComposer<any, TContext>[];
    DInterface?: InterfaceTypeComposer<TSource, TContext>;
    DKeyETC?: EnumTypeComposer<TContext>;
    constructor(gqType: GraphQLObjectType, schemaComposer: SchemaComposer<TContext>);
    static createFromModel<TSrc = any, TCtx = any>(baseModel: Model<any>, schemaComposer: SchemaComposer<TCtx>, opts?: ComposeWithMongooseDiscriminatorsOpts<any>): DiscriminatorTypeComposer<TSrc, TCtx>;
    _createDInterface(baseTC: DiscriminatorTypeComposer<any, any>): InterfaceTypeComposer<TSource, TContext>;
    getDKey(): string;
    getDKeyETC(): EnumTypeComposer<TContext>;
    getDInterface(): InterfaceTypeComposer<TSource, TContext>;
    hasChildTC(DName: string): boolean;
    discriminator<TSrc = Model<any>>(childModel: Model<any>, opts?: ComposeWithMongooseOpts<TContext>): ObjectTypeComposer<TSrc, TContext>;
    setFields(fields: ObjectTypeComposerFieldConfigMapDefinition<any, any>): this;
    setField(fieldName: string, fieldConfig: ObjectTypeComposerFieldConfigDefinition<any, any>): this;
    addFields(newFields: ObjectTypeComposerFieldConfigMapDefinition<any, any>): this;
    addNestedFields(newFields: ObjectTypeComposerFieldConfigMapDefinition<any, any>): this;
    removeField(fieldNameOrArray: string | Array<string>): this;
    removeOtherFields(fieldNameOrArray: string | Array<string>): this;
    reorderFields(names: string[]): this;
    extendField(fieldName: string, partialFieldConfig: Partial<ObjectTypeComposerFieldConfigAsObjectDefinition<any, TContext>>): this;
    makeFieldNonNull(fieldNameOrArray: string | Array<string>): this;
    makeFieldNullable(fieldNameOrArray: string | Array<string>): this;
    makeFieldPlural(fieldNameOrArray: string | Array<string>): this;
    makeFieldNonPlural(fieldNameOrArray: string | Array<string>): this;
    deprecateFields(fields: {
        [fieldName: string]: string;
    } | string[] | string): this;
    addRelation(fieldName: string, relationOpts: ObjectTypeComposerRelationOpts<any, any, any, any>): this;
}
//# sourceMappingURL=DiscriminatorTypeComposer.d.ts.map