// initial value for watchers to trigger on undefined initial values
const INITIAL_WATCHER_VALUE = {}
-// overload #1: simple effect
-export function watch(
- effect: WatchEffect,
- options?: BaseWatchOptions
-): StopHandle
-
-// overload #2: single source + cb
+// overload #1: single source + cb
export function watch<T, Immediate extends Readonly<boolean> = false>(
source: WatchSource<T>,
cb: WatchCallback<T, Immediate extends true ? (T | undefined) : T>,
options?: WatchOptions<Immediate>
): StopHandle
-// overload #3: array of multiple sources + cb
+// overload #2: array of multiple sources + cb
// Readonly constraint helps the callback to correctly infer value types based
// on position in the source array. Otherwise the values will get a union type
// of all possible value types.
// implementation
export function watch<T = any>(
- effectOrSource: WatchSource<T> | WatchSource<T>[] | WatchEffect,
- cbOrOptions?: WatchCallback<T> | WatchOptions,
+ source: WatchSource<T> | WatchSource<T>[],
+ cb: WatchCallback<T>,
options?: WatchOptions
): StopHandle {
- if (isFunction(cbOrOptions)) {
- // watch(source, cb)
- return doWatch(effectOrSource, cbOrOptions, options)
- } else {
- // TODO remove this in the next release
- __DEV__ &&
- warn(
- `\`watch(fn, options?)\` signature has been moved to a separate API. ` +
- `Use \`watchEffect(fn, options?)\` instead. \`watch\` will only ` +
- `support \`watch(source, cb, options?) signature in the next release.`
- )
- // watch(effect)
- return doWatch(effectOrSource, null, cbOrOptions)
+ if (__DEV__ && !isFunction(cb)) {
+ warn(
+ `\`watch(fn, options?)\` signature has been moved to a separate API. ` +
+ `Use \`watchEffect(fn, options?)\` instead. \`watch\` now only ` +
+ `supports \`watch(source, cb, options?) signature.`
+ )
}
+ return doWatch(source, cb, options)
}
function doWatch(