import { GraphQLInterfaceType, GraphQLTypeResolver, InterfaceTypeDefinitionNode } from "graphql";
import { ObjectType, ClassType, TypeResolvable, InputType, KeyValue } from "../../../..";
import { GQLObjectType } from "./GQLObjectType";
export declare class InterfaceType<T extends ClassType = any, ExtensionsType = any> extends GQLObjectType<GraphQLInterfaceType, T, ExtensionsType> implements TypeResolvable {
    protected _typeResolver: GraphQLTypeResolver<any, any>;
    private _possibleTypes;
    get definitionNode(): InterfaceTypeDefinitionNode;
    protected constructor(name: string);
    static create<T = any>(name: string): InterfaceType<ClassType<T>>;
    static create<T extends ClassType = any>(classType: T): InterfaceType<T>;
    static create<T = any>(inputType: InputType): InterfaceType<ClassType<T>>;
    static create<T = any>(objectType: ObjectType): InterfaceType<ClassType<T>>;
    static create<T = any>(interfaceType: InterfaceType): InterfaceType<ClassType<T>>;
    build(): GraphQLInterfaceType;
    /**
     * Set the type of the field
     * @param typeResolver the field resolver
     */
    setTypeResolver<TSource = any, TContext = any>(typeResolver: GraphQLTypeResolver<TSource, TContext>): this;
    /**
     * Set the possible types of the interface to resolve the __typename
     * @param possibleTypes The possible types
     */
    setPossibleTypes(...possibleTypes: ObjectType[]): this;
    /**
     * Set the possible types of the interface to resolve the __typename
     * @param possibleTypes The possible types
     */
    addPossibleTypes(...possibleTypes: ObjectType[]): this;
    /**
     * Add a suffix to the name of your type ("Interface" by default)
     * @param suffix The suffix to add to the name
     */
    suffix(suffix?: string): this;
    copy(): InterfaceType<T>;
    convert(to: typeof InputType): InputType<T>;
    convert(to: typeof ObjectType): ObjectType<T>;
    defaultTypeResolver(obj: KeyValue): any;
}
