const reactiveTuple = reactive(tuple)
expectType<Ref<number>>(reactiveTuple[0])
})
+
+describe('should unwrap Map correctly', () => {
+ const map = reactive(new Map<string, Ref<number>>())
+ expectType<Ref<number>>(map.get('a')!)
+
+ const map2 = reactive(new Map<string, { wrap: Ref<number> }>())
+ expectType<number>(map2.get('a')!.wrap)
+
+ const wm = reactive(new WeakMap<object, Ref<number>>())
+ expectType<Ref<number>>(wm.get({})!)
+
+ const wm2 = reactive(new WeakMap<object, { wrap: Ref<number> }>())
+ expectType<number>(wm2.get({})!.wrap)
+})
+
+describe('should unwrap Set correctly', () => {
+ const set = reactive(new Set<Ref<number>>())
+ expectType<Set<Ref<number>>>(set)
+
+ const set2 = reactive(new Set<{ wrap: Ref<number> }>())
+ expectType<Set<{ wrap: number }>>(set2)
+
+ const ws = reactive(new WeakSet<Ref<number>>())
+ expectType<WeakSet<Ref<number>>>(ws)
+
+ const ws2 = reactive(new WeakSet<{ wrap: Ref<number> }>())
+ expectType<WeakSet<{ wrap: number }>>(ws2)
+})
import { TrackOpTypes, TriggerOpTypes } from './operations'
import { capitalize, hasOwn, hasChanged, toRawType, isMap } from '@vue/shared'
-export type CollectionTypes = IterableCollections | WeakCollections
+type CollectionTypes = IterableCollections | WeakCollections
type IterableCollections = Map<any, any> | Set<any>
type WeakCollections = WeakMap<any, any> | WeakSet<any>
isShallow
} from './reactive'
import type { ShallowReactiveMarker } from './reactive'
-import { CollectionTypes } from './collectionHandlers'
import { createDep, Dep } from './dep'
declare const RefSymbol: unique symbol
export type UnwrapRefSimple<T> = T extends
| Function
- | CollectionTypes
| BaseTypes
| Ref
| RefUnwrapBailTypes[keyof RefUnwrapBailTypes]
| { [RawSymbol]?: true }
? T
- : T extends ReadonlyArray<any>
- ? { [K in keyof T]: UnwrapRefSimple<T[K]> }
- : T extends object & { [ShallowReactiveMarker]?: never }
- ? {
- [P in keyof T]: P extends symbol ? T[P] : UnwrapRef<T[P]>
- }
- : T
+ : T extends Map<infer K, infer V>
+ ? Map<K, UnwrapRefSimple<V>>
+ : T extends WeakMap<infer K, infer V>
+ ? WeakMap<K, UnwrapRefSimple<V>>
+ : T extends Set<infer V>
+ ? Set<UnwrapRefSimple<V>>
+ : T extends WeakSet<infer V>
+ ? WeakSet<UnwrapRefSimple<V>>
+ : T extends ReadonlyArray<any>
+ ? { [K in keyof T]: UnwrapRefSimple<T[K]> }
+ : T extends object & { [ShallowReactiveMarker]?: never }
+ ? {
+ [P in keyof T]: P extends symbol ? T[P] : UnwrapRef<T[P]>
+ }
+ : T