From 41d9c47300888fce9d4ff6a02f69d8a912cded8f Mon Sep 17 00:00:00 2001 From: webfansplz <308241863@qq.com> Date: Wed, 26 Oct 2022 17:43:42 +0800 Subject: [PATCH] fix(types): `$watch` callback parameters type (#6136) fix #6135 --- .../src/componentPublicInstance.ts | 8 +++++--- test-dts/watch.test-d.ts | 18 +++++++++++++++++- 2 files changed, 22 insertions(+), 4 deletions(-) diff --git a/packages/runtime-core/src/componentPublicInstance.ts b/packages/runtime-core/src/componentPublicInstance.ts index 1d913673123..1e4c83c96d8 100644 --- a/packages/runtime-core/src/componentPublicInstance.ts +++ b/packages/runtime-core/src/componentPublicInstance.ts @@ -193,9 +193,11 @@ export type ComponentPublicInstance< $options: Options & MergedComponentOptionsOverride $forceUpdate: () => void $nextTick: typeof nextTick - $watch( - source: string | Function, - cb: Function, + $watch any)>( + source: T, + cb: T extends (...args: any) => infer R + ? (...args: [R, R]) => any + : (...args: any) => any, options?: WatchOptions ): WatchStopHandle } & P & diff --git a/test-dts/watch.test-d.ts b/test-dts/watch.test-d.ts index 52d26c93c4c..2c16cabd9a4 100644 --- a/test-dts/watch.test-d.ts +++ b/test-dts/watch.test-d.ts @@ -1,4 +1,4 @@ -import { ref, computed, watch, expectType } from './index' +import { ref, computed, watch, expectType, defineComponent } from './index' const source = ref('foo') const source2 = computed(() => source.value) @@ -75,3 +75,19 @@ watch([someRef, otherRef], values => { // no type error console.log(value2.a) }) + +// #6135 +defineComponent({ + data() { + return { a: 1 } + }, + created() { + this.$watch( + () => this.a, + (v, ov) => { + expectType(v) + expectType(ov) + } + ) + } +})