export type EntityId = number;
type ComponentClass<T> = new (...args: any[]) => T;
type Query = 'All' | 'Any' | 'None';
export declare class EntityManager {
    private entityCount;
    private entities;
    private componentMap;
    createEntity(): EntityId;
    addComponent<T>(id: EntityId, componentClass: ComponentClass<T>, componentInstance: T): void;
    removeComponent<T>(id: EntityId, componentClass: ComponentClass<T>): void;
    getComponent<T>(id: EntityId, componentClass: ComponentClass<T>): T | undefined;
    getAllComponents(id: EntityId): any[];
    removeEntity(id: EntityId): void;
    query<T extends Record<string, ComponentClass<any>>>(filterType: Query, componentsToMatch: T, callback: (id: EntityId, matched: {
        [K in keyof T]: InstanceType<T[K]>;
    }) => void): void;
    getAllEntities(): EntityId[];
    private ensureEntityExists;
}
export {};
