Просмотр исходного кода

refactor(types): simplify UnwrapRef + specify iterable method return type (#1444)

Pick 5 лет назад
Родитель
Сommit
f54be6a462
2 измененных файлов с 19 добавлено и 2 удалено
  1. 17 1
      packages/reactivity/src/collectionHandlers.ts
  2. 2 1
      packages/reactivity/src/ref.ts

+ 17 - 1
packages/reactivity/src/collectionHandlers.ts

@@ -154,12 +154,28 @@ function createForEach(isReadonly: boolean, shallow: boolean) {
   }
 }
 
+interface Iterable {
+  [Symbol.iterator](): Iterator
+}
+
+interface Iterator {
+  next(value?: any): IterationResult
+}
+
+interface IterationResult {
+  value: any
+  done: boolean
+}
+
 function createIterableMethod(
   method: string | symbol,
   isReadonly: boolean,
   shallow: boolean
 ) {
-  return function(this: IterableCollections, ...args: unknown[]) {
+  return function(
+    this: IterableCollections,
+    ...args: unknown[]
+  ): Iterable & Iterator {
     const target = toRaw(this)
     const isMap = target instanceof Map
     const isPair = method === 'entries' || (method === Symbol.iterator && isMap)

+ 2 - 1
packages/reactivity/src/ref.ts

@@ -165,9 +165,10 @@ type UnwrapRefSimple<T> = T extends
   | CollectionTypes
   | BaseTypes
   | Ref
+  | Array<any>
   | RefUnwrapBailTypes[keyof RefUnwrapBailTypes]
   ? T
-  : T extends Array<any> ? T : T extends object ? UnwrappedObject<T> : 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