import { $mobx, IEnhancer, IListenable, Lambda, IInterceptable, IInterceptor, IAtom } from "../internal"; export type IObservableSetInitialValues = Set | readonly T[]; export type ISetDidChange = { object: ObservableSet; observableKind: "set"; debugObjectName: string; type: "add"; newValue: T; } | { object: ObservableSet; observableKind: "set"; debugObjectName: string; type: "delete"; oldValue: T; }; export type ISetWillDeleteChange = { type: "delete"; object: ObservableSet; oldValue: T; }; export type ISetWillAddChange = { type: "add"; object: ObservableSet; newValue: T; }; export type ISetWillChange = ISetWillDeleteChange | ISetWillAddChange; export declare class ObservableSet implements Set, IInterceptable, IListenable { name_: string; [$mobx]: {}; private data_; atom_: IAtom; changeListeners_: any; interceptors_: any; dehancer: any; enhancer_: (newV: any, oldV: any | undefined) => any; constructor(initialData?: IObservableSetInitialValues, enhancer?: IEnhancer, name_?: string); private dehanceValue_; clear(): void; forEach(callbackFn: (value: T, value2: T, set: Set) => void, thisArg?: any): void; get size(): number; add(value: T): this; delete(value: T): boolean; has(value: T): boolean; entries(): SetIterator<[T, T]>; keys(): SetIterator; values(): SetIterator; intersection(otherSet: ReadonlySetLike | Set): Set; union(otherSet: ReadonlySetLike | Set): Set; difference(otherSet: ReadonlySetLike): Set; symmetricDifference(otherSet: ReadonlySetLike | Set): Set; isSubsetOf(otherSet: ReadonlySetLike): boolean; isSupersetOf(otherSet: ReadonlySetLike): boolean; isDisjointFrom(otherSet: ReadonlySetLike | Set): boolean; replace(other: ObservableSet | IObservableSetInitialValues): ObservableSet; observe_(listener: (changes: ISetDidChange) => void, fireImmediately?: boolean): Lambda; intercept_(handler: IInterceptor>): Lambda; toJSON(): T[]; toString(): string; [Symbol.iterator](): SetIterator; get [Symbol.toStringTag](): string; } export declare var isObservableSet: (thing: any) => thing is ObservableSet;