From 96d65e1ab58ee2e1e820e41fbc2a7c753555cdc2 Mon Sep 17 00:00:00 2001 From: Evan You Date: Fri, 16 Aug 2019 09:54:57 -0400 Subject: [PATCH] wip: improve ref typing --- packages/reactivity/__tests__/ref.spec.ts | 10 ++++++++++ packages/reactivity/src/ref.ts | 4 ++-- 2 files changed, 12 insertions(+), 2 deletions(-) diff --git a/packages/reactivity/__tests__/ref.spec.ts b/packages/reactivity/__tests__/ref.spec.ts index 94600eb1c..e5cff502f 100644 --- a/packages/reactivity/__tests__/ref.spec.ts +++ b/packages/reactivity/__tests__/ref.spec.ts @@ -61,4 +61,14 @@ describe('observer/value', () => { expect(dummy2).toBe(3) expect(dummy3).toBe(3) }) + + it('should unwrap nested values in types', () => { + const a = { + b: ref(0) + } + + const c = ref(a) + + expect(typeof (c.value.b + 1)).toBe('number') + }) }) diff --git a/packages/reactivity/src/ref.ts b/packages/reactivity/src/ref.ts index a3a67b868..d0dc26fed 100644 --- a/packages/reactivity/src/ref.ts +++ b/packages/reactivity/src/ref.ts @@ -6,7 +6,7 @@ import { reactive } from './reactive' export const knownValues = new WeakSet() export interface Ref { - value: T + value: T extends Ref ? Ref : UnwrapRef } const convert = (val: any): any => (isObject(val) ? reactive(val) : val) @@ -24,7 +24,7 @@ export function ref(raw: T): Ref { } } knownValues.add(v) - return v + return v as any } export function isRef(v: any): v is Ref {