import { DescribedPredicate } from '../base/DescribedPredicate';
import { TypeScriptClass } from '../core/domain/TypeScriptClass';
import { ConditionEvents } from './ConditionEvents';
export declare abstract class ArchCondition<T> {
    readonly description: string;
    protected constructor(description: string);
    abstract check(item: T, events: ConditionEvents): void;
    finish(events: ConditionEvents): void;
    and(condition: ArchCondition<T>): ArchCondition<T>;
    or(condition: ArchCondition<T>): ArchCondition<T>;
    static from(predicate: DescribedPredicate<TypeScriptClass>): ConditionByPredicate;
    as(description: string): ArchCondition<T>;
}
export declare class ConditionByPredicate extends ArchCondition<TypeScriptClass> {
    private readonly predicate;
    private readonly eventDescriber;
    static of(predicate: DescribedPredicate<TypeScriptClass>): ConditionByPredicate;
    private constructor();
    as(description: string): ConditionByPredicate;
    check(typeScriptClass: TypeScriptClass, events: ConditionEvents): void;
}
