import { Imm } from 'ts-imm';
import { CodeBlock } from './CodeBlock';
import { CodeWriter } from './CodeWriter';
import { FunctionSpec } from './FunctionSpec';
import { Modifier } from './Modifier';
import { PropertySpec } from './PropertySpec';
import { TypeName, TypeVariable } from './TypeNames';
/** A generated `interface` declaration. */
export declare class InterfaceSpec extends Imm<InterfaceSpec> {
    static create(name: string): InterfaceSpec;
    readonly name: string;
    readonly javaDoc: CodeBlock;
    readonly modifiers: Modifier[];
    readonly typeVariables: TypeVariable[];
    readonly superInterfaces: TypeName[];
    readonly propertySpecs: PropertySpec[];
    readonly functionSpecs: FunctionSpec[];
    readonly indexableSpecs: FunctionSpec[];
    readonly callableField?: FunctionSpec;
    emit(codeWriter: CodeWriter): void;
    addJavadoc(format: string, ...args: unknown[]): this;
    addJavadocBlock(block: CodeBlock): this;
    addModifiers(...modifiers: Modifier[]): this;
    addTypeVariables(...typeVariables: TypeVariable[]): this;
    addTypeVariable(typeVariable: TypeVariable): this;
    addSuperInterfaces(...superInterfaces: TypeName[]): this;
    addSuperInterface(superClass: TypeName): this;
    addProperties(...propertySpecs: PropertySpec[]): this;
    addProperty(propertySpec: PropertySpec): this;
    addProperty(name: string, type: TypeName | string, data: Partial<PropertySpec>): this;
    addFunctions(...functionSpecs: FunctionSpec[]): this;
    addFunction(functionSpec: FunctionSpec): this;
    addIndexables(...indexableSpecs: FunctionSpec[]): this;
    addIndexable(functionSpec: FunctionSpec): this;
    callable(callable?: FunctionSpec): this;
    toString(): string;
    private get hasNoBody();
}
