export type BooleanSet = Record; export type PauseObserverFn = (pause?: boolean) => void; export type ObserveFn = (pauseObserverFn: PauseObserverFn) => any; export interface ObserverInfo { notifyInBatches: boolean | string; running: boolean; autoStart: boolean; previousObserverId: string | null; previousObserverPause: boolean; fn: ObserveFn; targetObserverIdSets: BooleanSet[]; } export interface ObservableInfo> { propObserverIdSetMap: Record; propGetterMap: { [K in keyof T]: () => T[K] }; } export type Observable< T extends Record = Record > = T & { __observableId: number; }; export type ComputationMap = { [K in keyof T]: ( obj: T, value: T[K], key: K, pauseObserver: PauseObserverFn, init: boolean ) => T[K]; }; export type ComputationValues

> = { [K in keyof P]: ReturnType; };