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

This commit is contained in:
HcySunYang 2022-01-21 15:33:30 +08:00 committed by GitHub
parent 171f5e9c60
commit c64907d261
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
3 changed files with 8 additions and 3 deletions

View File

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

View File

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

View File

@ -10,7 +10,8 @@ import {
toRef, toRef,
toRefs, toRefs,
ToRefs, ToRefs,
shallowReactive shallowReactive,
readonly
} from './index' } from './index'
function plainType(arg: number | Ref<number>) { function plainType(arg: number | Ref<number>) {
@ -236,6 +237,9 @@ expectType<Ref<string>>(p2.obj.k)
expectType<Ref<number>>(x) expectType<Ref<number>>(x)
} }
// readonly() + ref()
expectType<Readonly<Ref<number>>>(readonly(ref(1)))
// #2687 // #2687
interface AppData { interface AppData {
state: 'state1' | 'state2' | 'state3' state: 'state1' | 'state2' | 'state3'