Pārlūkot izejas kodu

types(reactivity): improve typings for `shallowRef` (#1780)

Carlos Rodrigues 5 gadi atpakaļ
vecāks
revīzija
c86e7ad11b
2 mainītis faili ar 21 papildinājumiem un 1 dzēšanām
  1. 4 1
      packages/reactivity/src/ref.ts
  2. 17 0
      test-dts/ref.test-d.ts

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

@@ -35,7 +35,10 @@ export function ref(value?: unknown) {
   return createRef(value)
 }
 
-export function shallowRef<T>(value: T): T extends Ref ? T : Ref<T>
+export function shallowRef<T extends object>(
+  value: T
+): T extends Ref ? T : Ref<T>
+export function shallowRef<T>(value: T): Ref<T>
 export function shallowRef<T = any>(): Ref<T | undefined>
 export function shallowRef(value?: unknown) {
   return createRef(value, true)

+ 17 - 0
test-dts/ref.test-d.ts

@@ -1,6 +1,7 @@
 import {
   Ref,
   ref,
+  shallowRef,
   isRef,
   unref,
   reactive,
@@ -120,6 +121,22 @@ const state = reactive({
 
 expectType<string>(state.foo.label)
 
+// shallowRef
+type Status = 'initial' | 'ready' | 'invalidating'
+const shallowStatus = shallowRef<Status>('initial')
+if (shallowStatus.value === 'initial') {
+  expectType<Ref<Status>>(shallowStatus)
+  expectType<Status>(shallowStatus.value)
+  shallowStatus.value = 'invalidating'
+}
+
+const refStatus = ref<Status>('initial')
+if (refStatus.value === 'initial') {
+  expectType<Ref<Status>>(shallowStatus)
+  expectType<Status>(shallowStatus.value)
+  refStatus.value = 'invalidating'
+}
+
 // proxyRefs: should return `reactive` directly
 const r1 = reactive({
   k: 'v'