import { Observable, BehaviorSubject } from 'rxjs';
export interface IFilter<TDataType, TFilterData> {
    type?: string;
    serialize(): Observable<TFilterData>;
    filter(data$: Observable<TDataType[]>): Observable<TDataType[]>;
}
export interface IFilterPredicate<TDataType, TFilterData> {
    (item: TDataType, filterData: TFilterData): boolean;
}
export declare abstract class Filter<TDataType, TFilterData> implements IFilter<TDataType, TFilterData> {
    protected value$: BehaviorSubject<TFilterData>;
    abstract predicate: IFilterPredicate<TDataType, TFilterData>;
    constructor();
    filter(data$: Observable<TDataType[]>): Observable<TDataType[]>;
    serialize(): Observable<TFilterData>;
}
