Procházet zdrojové kódy

fix(types): calling readonly() with ref() should return Readonly<Ref<T>>

HcySunYang před 4 roky
rodič
revize
f3e3f1f93b

+ 2 - 1
packages/reactivity/__tests__/readonly.spec.ts

@@ -438,7 +438,8 @@ describe('reactivity/readonly', () => {
   })
 
   test('should make ref readonly', () => {
-    const n: any = readonly(ref(1))
+    const n = readonly(ref(1))
+    // @ts-expect-error
     n.value = 2
     expect(n.value).toBe(1)
     expect(

+ 1 - 1
packages/reactivity/src/reactive.ts

@@ -139,7 +139,7 @@ export type DeepReadonly<T> = T extends Builtin
   : T extends Promise<infer U>
   ? Promise<DeepReadonly<U>>
   : T extends Ref<infer U>
-  ? Ref<DeepReadonly<U>>
+  ? Readonly<Ref<DeepReadonly<U>>>
   : T extends {}
   ? { readonly [K in keyof T]: DeepReadonly<T[K]> }
   : Readonly<T>

+ 5 - 1
test-dts/ref.test-d.ts

@@ -11,7 +11,8 @@ import {
   toRefs,
   ToRefs,
   shallowReactive,
-  watch
+  watch,
+  readonly
 } from './index'
 
 function plainType(arg: number | Ref<number>) {
@@ -208,6 +209,9 @@ expectType<{
   b: Ref<number>
 }>(objRefs)
 
+// readonly() + ref()
+expectType<Readonly<Ref<number>>>(readonly(ref(1)))
+
 // #2687
 interface AppData {
   state: 'state1' | 'state2' | 'state3'