From 18b3c5657a22a5ba2bdcadfdcb13fb6f56667b8b Mon Sep 17 00:00:00 2001 From: RicardoErii <‘1974364190@qq.com’> Date: Sun, 24 Dec 2023 16:55:06 +0800 Subject: [PATCH 1/2] test(reactivity): support distribution of union types --- packages/reactivity/src/ref.ts | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/packages/reactivity/src/ref.ts b/packages/reactivity/src/ref.ts index e156a2e1134..de51231d62a 100644 --- a/packages/reactivity/src/ref.ts +++ b/packages/reactivity/src/ref.ts @@ -476,14 +476,15 @@ type BaseTypes = string | number | boolean */ export interface RefUnwrapBailTypes {} +type DistrubuteRef = T extends Ref + ? unknown extends V + ? never + : V + : T export type ShallowUnwrapRef = { [K in keyof T]: T[K] extends Ref ? V // if `V` is `unknown` that means it does not extend `Ref` and is undefined - : T[K] extends Ref | undefined - ? unknown extends V - ? undefined - : V | undefined - : T[K] + : DistrubuteRef } export type UnwrapRef = T extends ShallowRef From fa5bf44519e5349e8b51bdc65f91fdabd6476db7 Mon Sep 17 00:00:00 2001 From: Evan You Date: Tue, 26 Dec 2023 11:50:47 +0800 Subject: [PATCH 2/2] chore: test + simplify fix --- packages/dts-test/ref.test-d.ts | 8 +++++++- packages/reactivity/src/ref.ts | 11 +++-------- 2 files changed, 10 insertions(+), 9 deletions(-) diff --git a/packages/dts-test/ref.test-d.ts b/packages/dts-test/ref.test-d.ts index 62bad77c2ee..fc3c9e65e4c 100644 --- a/packages/dts-test/ref.test-d.ts +++ b/packages/dts-test/ref.test-d.ts @@ -244,13 +244,19 @@ expectType(p1) // proxyRefs: `ShallowUnwrapRef` const r2 = { a: ref(1), + c: computed(() => 1), + u: undefined, obj: { k: ref('foo') - } + }, + union: Math.random() > 0 - 5 ? ref({ name: 'yo' }) : null } const p2 = proxyRefs(r2) expectType(p2.a) +expectType(p2.c) +expectType(p2.u) expectType>(p2.obj.k) +expectType<{ name: string } | null>(p2.union) // toRef and toRefs { diff --git a/packages/reactivity/src/ref.ts b/packages/reactivity/src/ref.ts index de51231d62a..6a584090efc 100644 --- a/packages/reactivity/src/ref.ts +++ b/packages/reactivity/src/ref.ts @@ -476,17 +476,12 @@ type BaseTypes = string | number | boolean */ export interface RefUnwrapBailTypes {} -type DistrubuteRef = T extends Ref - ? unknown extends V - ? never - : V - : T export type ShallowUnwrapRef = { - [K in keyof T]: T[K] extends Ref - ? V // if `V` is `unknown` that means it does not extend `Ref` and is undefined - : DistrubuteRef + [K in keyof T]: DistrubuteRef } +type DistrubuteRef = T extends Ref ? V : T + export type UnwrapRef = T extends ShallowRef ? V : T extends Ref