-import { computed, defineComponent, ref, shallowRef, watch } from 'vue'
+import {
+ computed,
+ defineComponent,
+ defineModel,
+ ref,
+ shallowRef,
+ watch,
+} from 'vue'
import { expectType } from './utils'
const source = ref('foo')
expectType<Steps>(value)
})
}
+
+{
+ // defineModel
+ const bool = defineModel({ default: false })
+ watch(bool, value => {
+ expectType<boolean>(value)
+ })
+
+ const bool1 = defineModel<boolean>()
+ watch(bool1, value => {
+ expectType<boolean | undefined>(value)
+ })
+
+ const msg = defineModel<string>({ required: true })
+ watch(msg, value => {
+ expectType<string>(value)
+ })
+
+ const arr = defineModel<string[]>({ required: true })
+ watch(arr, value => {
+ expectType<string[]>(value)
+ })
+
+ const obj = defineModel<{ foo: string }>({ required: true })
+ watch(obj, value => {
+ expectType<{ foo: string }>(value)
+ })
+}
type MultiWatchSources = (WatchSource<unknown> | object)[]
+// overload: 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>,
+): WatchStopHandle
+
// overload: array of multiple sources + cb
export function watch<
T extends MultiWatchSources,
options?: WatchOptions<Immediate>,
): WatchStopHandle
-// overload: 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>,
-): WatchStopHandle
-
// overload: watching reactive object w/ cb
export function watch<
T extends object,