import { Imm } from 'ts-imm';
import { ClassSpec } from './ClassSpec';
import { CodeBlock } from './CodeBlock';
import { EnumSpec } from './EnumSpec';
import { FunctionSpec } from './FunctionSpec';
import { InterfaceSpec } from './InterfaceSpec';
import { PropertySpec } from './PropertySpec';
import { StringBuffer } from './StringBuffer';
import { SymbolSpec } from './SymbolSpecs';
import { TypeAliasSpec } from './TypeAliasSpec';
import { TypeName } from './TypeNames';
/**
 * A TypeScript file containing top level objects like classes, objects, functions, properties, and type
 * aliases.
 *
 * Items are output in the following order:
 * - Comment
 * - Imports
 * - Members
 */
export declare class FileSpec extends Imm<FileSpec> {
    /**
     * Creates a file to contain generated output.
     *
     * `file` should be the module name, e.g. for build/foo.ts, use file = foo.
     */
    static create(file: string): FileSpec;
    readonly path: string;
    readonly comment: CodeBlock;
    readonly members: any[];
    readonly indentField: string;
    exportType(typeName: string): TypeName | undefined;
    exportNamed(symbolName: string): SymbolSpec | undefined;
    exportAll(localName: string): SymbolSpec;
    emit(out: StringBuffer): void;
    isEmpty(): boolean;
    isNotEmpty(): boolean;
    addComment(format: string, ...args: any[]): this;
    addClass(classSpec: ClassSpec): this;
    addInterface(ifaceSpec: InterfaceSpec): this;
    addEnum(enumSpec: EnumSpec): this;
    addFunction(functionSpec: FunctionSpec): this;
    addProperty(propertySpec: PropertySpec): this;
    addTypeAlias(typeAliasSpec: TypeAliasSpec): this;
    addCode(codeBlock: CodeBlock): this;
    indent(indent: string): this;
    toString(): string;
    private emitToWriter;
}
