import { WatchOptions, WatchSource, WatchStopHandle } from 'vue'; type UnwrapSource = T extends WatchSource ? V : T extends object ? T : never; type Changes = Partial<{ [K in keyof T]: { old: UnwrapSource | undefined; new: UnwrapSource; }; }>; /** * useWatch — расширенный `watch` с измененным callback * - принимает объект с реактивными свойствами, точно такими же, как при указании в массиве в стандартном `watch` * - callback возвращает изменившиеся свойства в объекте `changes` с `{old, new}` * * Если у вас есть несколько `watch`, которые меняют одно состояние, то могут возникнуть проблемы: * - рост длины цепочек `watch`, когда один `watch` приводит к срабатыванию другого * - лишние вызовы при согласованных состояниях, когда разные `watch` устанавливают одно и то же значение * - гонка при несогласованных состояниях, когда разные `watch` в разные тики при этом одновременно могут устанавливать разные состояния * * Если у вас такой случай и его нельзя упростить, то используйте `useWatch`, в остальных случаях используйте только стандартный `watch` * * @example * * ```js * * useWatch({ a: ref(5), b: ref('word') }, (changes) => { * console.log(changes.a?.new, changes.a?.old); * console.log(changes.b?.new, changes.b?.old); * }); * ``` */ export declare function useWatch>(sourcesObj: T, cb: (changes: Changes, onCleanup: (fn: () => void) => void) => void | Promise, options?: WatchOptions): WatchStopHandle; export {};