Explorar el Código

types: bring back my changes

pikax hace 6 años
padre
commit
ab9add4f78

+ 24 - 13
packages/reactivity/src/ref.ts

@@ -103,16 +103,27 @@ function toProxyRef<T extends object, K extends keyof T>(
 // RelativePath extends object -> true
 type BaseTypes = string | number | boolean
 
-// Recursively unwraps nested value bindings.
-export type UnwrapRef<T> = {
-  cRef: T extends ComputedRef<infer V> ? UnwrapRef<V> : T
-  ref: T extends Ref<infer V> ? UnwrapRef<V> : T
-  array: T
-  object: { [K in keyof T]: UnwrapRef<T[K]> }
-}[T extends ComputedRef<any>
-  ? 'cRef'
-  : T extends Array<any>
-    ? 'array'
-    : T extends Ref | Function | CollectionTypes | BaseTypes
-      ? 'ref' // bail out on types that shouldn't be unwrapped
-      : T extends object ? 'object' : 'ref']
+// Super simple tuple checker
+type Tupple<T extends Array<any>> = T[0] extends T[1]
+  ? T[1] extends T[2] ? never : true
+  : true
+
+export type UnwrapRef<T> = T extends ComputedRef<infer V>
+  ? UnwrapRefSimple<V>
+  : T extends Ref<infer V> ? UnwrapRefSimple<V> : UnwrapRefSimple<T>
+
+type UnwrapRefSimple<T> = T extends Function | CollectionTypes | BaseTypes | Ref
+  ? T
+  : T extends Array<infer V>
+    ? Tupple<T> extends never ? Array<V> : UnwrapTupple<T>
+    : T extends object ? UnwrappedObject<T> : T
+
+export type UnwrapTupple<T> = { [P in keyof T]: T[P] } & {
+  length: number
+  [Symbol.iterator]: any
+  [Symbol.unscopables]: any
+}
+
+// interface UnwrappedArray<T> extends Array<T> {}
+
+type UnwrappedObject<T> = { [P in keyof T]: UnwrapRef<T[P]> }

+ 0 - 1
packages/runtime-core/__tests__/apiTemplateRef.spec.ts

@@ -4,7 +4,6 @@ import {
   h,
   render,
   nextTick,
-  Ref,
   defineComponent,
   reactive
 } from '@vue/runtime-test'