]> git.ipfire.org Git - thirdparty/vuejs/core.git/commitdiff
types(reactivity): add dts for proxyRefs & improve typings (#1786)
authorPick <pickchen@tencent.com>
Fri, 14 Aug 2020 21:37:36 +0000 (05:37 +0800)
committerGitHub <noreply@github.com>
Fri, 14 Aug 2020 21:37:36 +0000 (17:37 -0400)
packages/reactivity/src/baseHandlers.ts
packages/reactivity/src/reactive.ts
test-dts/ref.test-d.ts

index 6c0a1a4464e8c36041c97b8542fbdd8bb615f573..11a7b1cc04e372fbadb7add00cc345c91669d5ab 100644 (file)
@@ -1,4 +1,4 @@
-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 {
@@ -41,7 +41,7 @@ const arrayInstrumentations: Record<string, Function> = {}
 })
 
 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) {
@@ -50,8 +50,8 @@ function createGetter(isReadonly = false, shallow = false) {
       key === ReactiveFlags.RAW &&
       receiver ===
         (isReadonly
-          ? (target as any)[ReactiveFlags.READONLY]
-          : (target as any)[ReactiveFlags.REACTIVE])
+          ? target[ReactiveFlags.READONLY]
+          : target[ReactiveFlags.REACTIVE])
     ) {
       return target
     }
index 4dea9e00c866c869203ddf2b0c27b28edb234c27..7541886c405a6e69d3cae1490d8a0489b40b80ba 100644 (file)
@@ -21,7 +21,7 @@ export const enum ReactiveFlags {
   READONLY = '__v_readonly'
 }
 
-interface Target {
+export interface Target {
   [ReactiveFlags.SKIP]?: boolean
   [ReactiveFlags.IS_REACTIVE]?: boolean
   [ReactiveFlags.IS_READONLY]?: boolean
index cafe21439c9adacdd24b3aadbd573768b8afdc91..6430b15c57a8a99e1b90f0297267a7a431564e38 100644 (file)
@@ -1,4 +1,12 @@
-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
@@ -111,3 +119,21 @@ const state = reactive({
 })
 
 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)