fix(types): fix defineModel watch type error (#9942)

close #9939
This commit is contained in:
丶远方 2023-12-30 08:22:56 +08:00 committed by GitHub
parent a41c5f1f43
commit 4af85835f7
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 43 additions and 8 deletions

View File

@ -1,4 +1,11 @@
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')
@ -106,3 +113,31 @@ defineComponent({
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)
})
}

View File

@ -115,6 +115,13 @@ const INITIAL_WATCHER_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,
@ -137,13 +144,6 @@ export function watch<
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,