import { Cloneable } from './Cloneable';
export type OneToManyMapStartSpec<TRelation extends object> = {
    [TKey in keyof TRelation]: {
        isOptional: undefined extends TRelation[TKey] ? true : false;
    };
};
/**
 * Data structure able to efficiently manage a set of models related to a set of properties in a one to many relation.
 */
export declare class OneToManyMapStar<TModel, TRelation extends object> implements Cloneable<OneToManyMapStar<TModel, TRelation>> {
    #private;
    constructor(spec: OneToManyMapStartSpec<TRelation>);
    add(model: TModel, relation: TRelation): void;
    clone(): this;
    get<TKey extends keyof TRelation>(key: TKey, value: Required<TRelation>[TKey]): Iterable<TModel> | undefined;
    getAllKeys<TKey extends keyof TRelation>(key: TKey): Iterable<TRelation[TKey]>;
    removeByRelation<TKey extends keyof TRelation>(key: TKey, value: Required<TRelation>[TKey]): void;
    protected _buildNewInstance(spec: OneToManyMapStartSpec<TRelation>): this;
    protected _cloneModel(model: TModel): TModel;
    protected _cloneRelation(relation: TRelation): TRelation;
}
//# sourceMappingURL=OneToManyMapStar.d.ts.map