import { CollectionField } from "./collection"; export interface CollectionInterface { new (relation: CollectionField, instance: any): BaseCollectionInterface; } export declare abstract class BaseCollectionInterface { protected readonly relation: CollectionField; protected readonly instance: any; constructor(relation: CollectionField, instance: any); get collection(): any; abstract instanciate(initial: Iterable): any; abstract items(): Iterable; abstract storeItem(item: T): void; abstract unstoreItem(item: T): void; asSet(): Set; } export declare class ArrayInterface extends BaseCollectionInterface { constructor(relation: CollectionField, instance: any); instanciate(initial: any): any[]; items(): Iterable; storeItem(object: T): void; unstoreItem(object: T): void; } export declare class SetInterface extends BaseCollectionInterface { constructor(relation: CollectionField, instance: any); instanciate(initial?: any): Set; items(): Iterable; storeItem(object: T): void; unstoreItem(object: T): void; } export declare class ObjectInterface extends BaseCollectionInterface { constructor(relation: CollectionField, instance: any); instanciate(initial: any): {}; protected getIndexKey(obj: any): any; items(): Iterable; storeItem(object: T): void; unstoreItem(object: T): void; } export declare class MapInterface extends BaseCollectionInterface { constructor(relation: CollectionField, instance: any); instanciate(initial: any): Map; protected getIndexKey(obj: any): any; items(): Iterable; storeItem(object: T): void; unstoreItem(object: T): void; }