import { Event } from "@hmans/event"; export interface IEntity { [key: string]: any; } export declare type EntityWith = E & { [K in P]-?: E[K]; }; export declare type EntityPredicate = (entity: E) => entity is D; export declare const createBucket: () => Bucket; export declare class Bucket { entities: E[]; onEntityAdded: Event; onEntityRemoved: Event; onEntityUpdated: Event; derivedBuckets: WeakMap; [Symbol.iterator](): IterableIterator; has(entity: E): boolean; add(entity: E): E; update(entity: E, update?: Partial | ((entity: E) => Partial)): E; remove(entity: E): void; clear(): void; derive(predicate?: ((entity: E) => entity is D) | ((entity: E) => boolean)): Bucket; } export declare const id: (entity: IEntity) => number | undefined; export declare const isArchetype: (entity: E, ...properties: P[]) => entity is EntityWith; export declare const archetype: (...properties: P[]) => EntityPredicate>;