From 536f62332c455ba82ef2979ba634b831f91928ba Mon Sep 17 00:00:00 2001 From: Tycho Date: Wed, 7 Aug 2024 11:20:04 +0800 Subject: [PATCH] fix(types/ref): correct type inference for nested refs (#11536) close #11532 close #11537 --- packages/dts-test/ref.test-d.ts | 5 +++++ packages/reactivity/src/ref.ts | 4 +++- 2 files changed, 8 insertions(+), 1 deletion(-) diff --git a/packages/dts-test/ref.test-d.ts b/packages/dts-test/ref.test-d.ts index 46d39214b93..3161d9d8b55 100644 --- a/packages/dts-test/ref.test-d.ts +++ b/packages/dts-test/ref.test-d.ts @@ -180,6 +180,11 @@ describe('allow getter and setter types to be unrelated', () => { const d = {} as T const e = ref(d) e.value = d + + const f = ref(ref(0)) + expectType(f.value) + // @ts-expect-error + f.value = ref(1) }) // shallowRef diff --git a/packages/reactivity/src/ref.ts b/packages/reactivity/src/ref.ts index 6e22d1bcd58..3128a8413c0 100644 --- a/packages/reactivity/src/ref.ts +++ b/packages/reactivity/src/ref.ts @@ -109,7 +109,9 @@ export function isRef(r: any): r is Ref { * @param value - The object to wrap in the ref. * @see {@link https://vuejs.org/api/reactivity-core.html#ref} */ -export function ref(value: T): Ref, UnwrapRef | T> +export function ref( + value: T, +): [T] extends [Ref] ? IfAny, T> : Ref, UnwrapRef | T> export function ref(): Ref export function ref(value?: unknown) { return createRef(value, false)