]> git.ipfire.org Git - thirdparty/vuejs/core.git/commitdiff
fix(types): handle ToRef<any>
authorEvan You <yyx990803@gmail.com>
Sun, 16 Jan 2022 07:46:49 +0000 (15:46 +0800)
committerEvan You <yyx990803@gmail.com>
Sun, 16 Jan 2022 07:47:00 +0000 (15:47 +0800)
fix #5188

packages/reactivity/src/ref.ts
test-dts/ref.test-d.ts

index 55059485d6cb6fe80b9070c2d57857a6d04c1740..c972676ac42ce3e52ed0b18c2b5255a8a0c48103 100644 (file)
@@ -1,6 +1,6 @@
 import { isTracking, trackEffects, triggerEffects } from './effect'
 import { TrackOpTypes, TriggerOpTypes } from './operations'
-import { isArray, hasChanged } from '@vue/shared'
+import { isArray, hasChanged, IfAny } from '@vue/shared'
 import { isProxy, toRaw, isReactive, toReactive } from './reactive'
 import type { ShallowReactiveMarker } from './reactive'
 import { CollectionTypes } from './collectionHandlers'
@@ -222,7 +222,7 @@ class ObjectRefImpl<T extends object, K extends keyof T> {
   }
 }
 
-export type ToRef<T> = [T] extends [Ref] ? T : Ref<T>
+export type ToRef<T> = IfAny<T, Ref<T>, [T] extends [Ref] ? T : Ref<T>>
 
 export function toRef<T extends object, K extends keyof T>(
   object: T,
index f91d6415f70f7d3bc5a256bd402f89cea381da6a..e585470d5e4c03e04ce03faf45734a23d3c3f93a 100644 (file)
@@ -222,6 +222,11 @@ expectType<Ref<string>>(p2.obj.k)
 
   expectType<Ref<number>>(toRefResult.value.b)
   expectType<Ref<number>>(toRefsResult.a.value.b)
+
+  // #5188
+  const props = { foo: 1 } as { foo: any }
+  const { foo } = toRefs(props)
+  expectType<Ref<any>>(foo)
 }
 
 // toRef default value