import { Base, IList$1, Type } from "./type";
import { ObservableCollection$1 } from "./ObservableCollection$1";
import { NotifyCollectionChangedEventArgs } from "./NotifyCollectionChangedEventArgs";
import { SyncableObservableCollectionChangedListener } from "./SyncableObservableCollectionChangedListener";
/**
 * @hidden
 */
export declare class SyncableObservableCollection$2<T1, T2> extends Base {
    static $t: Type;
    protected $t1: Type;
    protected $t2: Type;
    private a;
    get syncTarget(): SyncableObservableCollection$1<T2>;
    set syncTarget(a: SyncableObservableCollection$1<T2>);
    private r;
    addOneWayTarget(a: SyncableObservableCollection$1<T2>): void;
    removeOneWayTarget(a: SyncableObservableCollection$1<T2>): void;
    private _compare;
    get compare(): (arg1: T1, arg2: T2) => boolean;
    set compare(a: (arg1: T1, arg2: T2) => boolean);
    private _createTo;
    get createTo(): (arg1: T1) => T2;
    set createTo(a: (arg1: T1) => T2);
    private _createFrom;
    get createFrom(): (arg1: T2) => T1;
    set createFrom(a: (arg1: T2) => T1);
    private _shouldDetachOnTargetChange;
    get shouldDetachOnTargetChange(): boolean;
    set shouldDetachOnTargetChange(a: boolean);
    private ah;
    private ao;
    private l;
    private ap;
    private aq;
    private ar;
    protected ag(a: NotifyCollectionChangedEventArgs): void;
    private am;
    private an;
    private h;
    private i;
    private g;
    private _inner;
    constructor($t1: Type, $t2: Type, a: number);
    constructor($t1: Type, $t2: Type, a: number, b: ObservableCollection$1<T1>);
    constructor($t1: Type, $t2: Type, a: number, ..._rest: any[]);
    ae(a: ObservableCollection$1<T1>): void;
    private y;
    add(a: T1): boolean;
    add1(a: number, b: T1): void;
    clear(): void;
    get(a: number): T1;
    indexOf(a: T1): number;
    remove1(a: T1): boolean;
    contains(a: T1): boolean;
    remove(a: number): T1;
    set(a: number, b: T1): T1;
    size(): number;
    private q;
    addChangedListener(a: SyncableObservableCollectionChangedListener): void;
    removeChangedListener(a: SyncableObservableCollectionChangedListener): void;
    addListener(a: (sender: any, e: NotifyCollectionChangedEventArgs) => void): void;
    removeListener(a: (sender: any, e: NotifyCollectionChangedEventArgs) => void): void;
    private p;
    ab(a: () => void): void;
    aj(a: () => void): void;
    f: () => void;
    get all(): IList$1<T1>;
}
/**
 * @hidden
 */
export declare class SyncableObservableCollection$1<T> extends SyncableObservableCollection$2<T, T> {
    static $t: Type;
    protected $t: Type;
    constructor($t: Type);
}
