-import { reactive, readonly, toRaw, ReactiveFlags } from './reactive'
+import { reactive, readonly, toRaw, ReactiveFlags, Target } from './reactive'
import { TrackOpTypes, TriggerOpTypes } from './operations'
import { track, trigger, ITERATE_KEY } from './effect'
import {
})
function createGetter(isReadonly = false, shallow = false) {
- return function get(target: object, key: string | symbol, receiver: object) {
+ return function get(target: Target, key: string | symbol, receiver: object) {
if (key === ReactiveFlags.IS_REACTIVE) {
return !isReadonly
} else if (key === ReactiveFlags.IS_READONLY) {
key === ReactiveFlags.RAW &&
receiver ===
(isReadonly
- ? (target as any)[ReactiveFlags.READONLY]
- : (target as any)[ReactiveFlags.REACTIVE])
+ ? target[ReactiveFlags.READONLY]
+ : target[ReactiveFlags.REACTIVE])
) {
return target
}
READONLY = '__v_readonly'
}
-interface Target {
+export interface Target {
[ReactiveFlags.SKIP]?: boolean
[ReactiveFlags.IS_REACTIVE]?: boolean
[ReactiveFlags.IS_READONLY]?: boolean
-import { Ref, ref, isRef, unref, reactive, expectType } from './index'
+import {
+ Ref,
+ ref,
+ isRef,
+ unref,
+ reactive,
+ expectType,
+ proxyRefs
+} from './index'
function plainType(arg: number | Ref<number>) {
// ref coercing
})
expectType<string>(state.foo.label)
+
+// proxyRefs: should return `reactive` directly
+const r1 = reactive({
+ k: 'v'
+})
+const p1 = proxyRefs(r1)
+expectType<typeof r1>(p1)
+
+// proxyRefs: `ShallowUnwrapRef`
+const r2 = {
+ a: ref(1),
+ obj: {
+ k: ref('foo')
+ }
+}
+const p2 = proxyRefs(r2)
+expectType<number>(p2.a)
+expectType<Ref<string>>(p2.obj.k)