From f02b60d5533352b87f7dac7e260b8fb3aa6931ec Mon Sep 17 00:00:00 2001 From: Evan You Date: Fri, 31 Mar 2023 16:30:35 +0800 Subject: [PATCH] test: fix tests --- packages/reactivity/__tests__/ref.spec.ts | 1 - packages/reactivity/src/ref.ts | 27 ++++++++++++++--------- 2 files changed, 16 insertions(+), 12 deletions(-) diff --git a/packages/reactivity/__tests__/ref.spec.ts b/packages/reactivity/__tests__/ref.spec.ts index b4f6bfdc3a6..bcfc178e952 100644 --- a/packages/reactivity/__tests__/ref.spec.ts +++ b/packages/reactivity/__tests__/ref.spec.ts @@ -196,7 +196,6 @@ describe('reactivity/ref', () => { test('unref', () => { expect(unref(1)).toBe(1) expect(unref(ref(1))).toBe(1) - expect(unref(() => 1)).toBe(1) }) test('shallowRef', () => { diff --git a/packages/reactivity/src/ref.ts b/packages/reactivity/src/ref.ts index ffa033daaab..fe9493949f8 100644 --- a/packages/reactivity/src/ref.ts +++ b/packages/reactivity/src/ref.ts @@ -11,7 +11,8 @@ import { hasChanged, IfAny, isFunction, - isPlainObject + isString, + isObject } from '@vue/shared' import { isProxy, @@ -219,7 +220,7 @@ export function toRefs(object: T): ToRefs { } const ret: any = isArray(object) ? new Array(object.length) : {} for (const key in object) { - ret[key] = toRef(object, key) + ret[key] = propertyToRef(object, key) } return ret } @@ -285,20 +286,24 @@ export function toRef( return source } else if (isFunction(source)) { return new GetterRefImpl(source as () => unknown) as any - } else if (isPlainObject(source) && key) { - const val = (source as Record)[key] - return isRef(val) - ? val - : (new ObjectRefImpl( - source as Record, - key, - defaultValue - ) as any) + } else if (isObject(source) && isString(key)) { + return propertyToRef(source, key, defaultValue) } else { return ref(source) } } +function propertyToRef(source: object, key: string, defaultValue?: unknown) { + const val = (source as any)[key] + return isRef(val) + ? val + : (new ObjectRefImpl( + source as Record, + key, + defaultValue + ) as any) +} + // corner case when use narrows type // Ex. type RelativePath = string & { __brand: unknown } // RelativePath extends object -> true