import { Observable } from 'rxjs'; declare type IterableCollections = Map | Set; declare type WeakCollections = WeakMap | WeakSet; declare type CollectionTypes = IterableCollections | WeakCollections; declare type PrimitiveTypes = string | number | symbol | any[]; export declare const notifyPropertyChangedSymbol: unique symbol; export declare const notifyCollectionChangedSymbol: unique symbol; export declare type ObjectType = T extends CollectionTypes ? never : T extends PrimitiveTypes ? never : T extends any[] ? never : T; export declare type NotifyPropertyChangedType = T extends { [notifyPropertyChangedSymbol]: Observable; } ? T : T extends ObjectType ? T & { [notifyPropertyChangedSymbol]: Observable; } : never; export declare type CollectionType = T extends CollectionTypes ? never : T extends any[] ? never : T; export declare type NotifyCollectionChangedType = T extends { [notifyCollectionChangedSymbol]: Observable; } ? T : T extends CollectionType ? T & { [notifyCollectionChangedSymbol]: Observable; } : never; export declare const objectToString: () => string; export declare const toTypeString: (value: unknown) => string; export declare const toRawType: (value: unknown) => string; export declare function toRaw(observed: T): T; export declare function isNotifyPropertyChanged(target: T): target is NotifyPropertyChangedType; export declare function isNotifyCollectionChanged(target: T): target is NotifyCollectionChangedType; export declare function observePropertyChanges(target: ObjectType): NotifyPropertyChangedType; export declare function observeCollectionChanges(target: CollectionType): NotifyCollectionChangedType; export declare function notificationsFor(target: NotifyPropertyChangedType): Observable; export declare function notificationsFor(target: NotifyCollectionChangedType): Observable; export {};