ソースを参照

fix(reactivity): ensure `unref` correctly resolves type for `ShallowRef` (#11360)

close #11356
Tycho 1 年間 前
コミット
a509e30f05
2 ファイル変更8 行追加2 行削除
  1. 4 0
      packages/dts-test/ref.test-d.ts
  2. 4 2
      packages/reactivity/src/ref.ts

+ 4 - 0
packages/dts-test/ref.test-d.ts

@@ -452,3 +452,7 @@ describe('toRef <-> toValue', () => {
     ),
   )
 })
+
+// unref
+declare const text: ShallowRef<string> | ComputedRef<string> | MaybeRef<string>
+expectType<string>(unref(text))

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

@@ -235,7 +235,7 @@ export type MaybeRefOrGetter<T = any> = MaybeRef<T> | (() => T)
  * @param ref - Ref or plain value to be converted into the plain value.
  * @see {@link https://vuejs.org/api/reactivity-utilities.html#unref}
  */
-export function unref<T>(ref: MaybeRef<T> | ComputedRef<T>): T {
+export function unref<T>(ref: MaybeRef<T> | ComputedRef<T> | ShallowRef<T>): T {
   return isRef(ref) ? ref.value : ref
 }
 
@@ -255,7 +255,9 @@ export function unref<T>(ref: MaybeRef<T> | ComputedRef<T>): T {
  * @param source - A getter, an existing ref, or a non-function value.
  * @see {@link https://vuejs.org/api/reactivity-utilities.html#tovalue}
  */
-export function toValue<T>(source: MaybeRefOrGetter<T> | ComputedRef<T>): T {
+export function toValue<T>(
+  source: MaybeRefOrGetter<T> | ComputedRef<T> | ShallowRef<T>,
+): T {
   return isFunction(source) ? source() : unref(source)
 }