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 {