import { TypeGuard } from '../resources/type-guard';
import { EntityDefinition } from './EntityDefinition';
import { ClassDefinition } from './class-definition';
import { PropertyDefinition } from './property-definition';
/**
 * @category Internal
 */
export declare abstract class ClassAndPropertyDefinitions {
    abstract properties: {
        [index: string]: PropertyDefinition;
    };
    abstract classes: {
        [index: string]: ClassDefinition;
    };
    abstract getAllPropertyDefinitions(): PropertyDefinition[];
    abstract getPropertyDefinitionsByType<T extends PropertyDefinition>(type: TypeGuard.Constructor<T>): T[];
    /**
     * Given a map of entity Iris to entity definitions,
     * returns an array of entity definitions.
     *
     * @param entityDefs Entity definitions to be returned as an array.
     */
    protected getAllEntityDefinitionsAsArray<T extends EntityDefinition>(entityDefs: {
        [index: string]: T;
    }): T[];
    /**
     * Given an array of entity definitions,
     * returns only the entity definitions matching the given type.
     *
     * @param entityDefs The entity definitions to be filtered.
     * @param type The type of entity definitions to be returned.
     */
    protected getEntityDefinitionsByTypeAsArray<T extends EntityDefinition>(entityDefs: EntityDefinition[], type: TypeGuard.Constructor<T>): T[];
}
//# sourceMappingURL=ClassAndPropertyDefinitions.d.ts.map