]> git.ipfire.org Git - thirdparty/vuejs/core.git/commitdiff
types: remove tuple check and add type check for tuple 579/head
authorpikax <carlos@hypermob.co.uk>
Wed, 15 Apr 2020 15:22:44 +0000 (16:22 +0100)
committerpikax <carlos@hypermob.co.uk>
Wed, 15 Apr 2020 15:22:44 +0000 (16:22 +0100)
packages/reactivity/src/ref.ts
test-dts/ref.test-d.ts

index 569e4e0d40a4ad201ee751461b4610d2ca0c735b..d2898673e3cf559d8be6e48ec1c68ec932f78685 100644 (file)
@@ -128,31 +128,13 @@ export function toRef<T extends object, K extends keyof T>(
 // RelativePath extends object -> true
 type BaseTypes = string | number | boolean | Node | Window
 
-// Super simple tuple checker
-type IsTuple<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
-  | Element
+type UnwrapRefSimple<T> = T extends Function | CollectionTypes | BaseTypes | Ref
   ? T
-  : T extends Array<infer V>
-    ? IsTuple<T> extends true ? UnwrapTuple<T> : Array<V>
-    : T extends object ? UnwrappedObject<T> : T
-
-export type UnwrapTuple<T> = { [P in keyof T]: T[P] } & {
-  length: number
-  [Symbol.iterator]: any
-  [Symbol.unscopables]: any
-}
+  : T extends Array<any> ? T : T extends object ? UnwrappedObject<T> : T
 
 // Extract all known symbols from an object
 // when unwrapping Object the symbols are not `in keyof`, this should cover all the
index a2c717483bdc5bf8b3763095a6cb3793c84742d7..f9b72312bdc3c5375a5edcd8f8e065303ea39e10 100644 (file)
@@ -21,14 +21,15 @@ function plainType(arg: number | Ref<number>) {
   expectType<Ref<{ foo: number }>>(nestedRef)
   expectType<{ foo: number }>(nestedRef.value)
 
+  // tuple
+  expectType<[number, string]>(unref(ref([1, '1'])))
+
   interface IteratorFoo {
     [Symbol.iterator]: any
   }
-  expectType<Ref<UnwrapRef<IteratorFoo>> | Ref<null>>(
-    ref<IteratorFoo | null>(null)
-  )
 
-  expectType<Ref<HTMLElement> | Ref<null>>(ref<HTMLElement | null>(null))
+  // with symbol
+  expectType<IteratorFoo | null>(unref(ref<IteratorFoo | null>(null)))
 }
 
 plainType(1)