import { Template, Builder, Element } from "./types";
export declare abstract class BuilderBase<R> {
    private template;
    private underConstruction;
    constructor(template: Template<R>);
    build(): R;
    protected setScalar<F extends keyof R>(fieldName: F, value: R[F]): this;
    protected addScalar<F extends keyof R, E extends Element<R[F]>>(fieldName: F, value: E): this;
    protected setNested<F extends keyof R, B extends Builder<R[F], Template<R[F]>>>(fieldName: F, builder: B, block: (builder: B) => any): this;
    protected addNested<F extends keyof R, E extends Element<R[F]>, B extends Builder<E, Template<E>>>(fieldName: F, builder: B, block: (builder: B) => any): this;
    private ensureArray;
}
//# sourceMappingURL=builder.d.ts.map