mirror of https://github.com/vuejs/core.git
65 lines
1.5 KiB
TypeScript
65 lines
1.5 KiB
TypeScript
import { ref, readonly, shallowReadonly, Ref, reactive, markRaw } from 'vue'
|
|
import { describe, expectType } from './utils'
|
|
|
|
describe('should support DeepReadonly', () => {
|
|
const r = readonly({ obj: { k: 'v' } })
|
|
// @ts-expect-error
|
|
r.obj = {}
|
|
// @ts-expect-error
|
|
r.obj.k = 'x'
|
|
})
|
|
|
|
// #4180
|
|
describe('readonly ref', () => {
|
|
const r = readonly(ref({ count: 1 }))
|
|
expectType<Ref>(r)
|
|
})
|
|
|
|
describe('should support markRaw', () => {
|
|
class Test<T> {
|
|
item = {} as Ref<T>
|
|
}
|
|
const test = new Test<number>()
|
|
const plain = {
|
|
ref: ref(1)
|
|
}
|
|
|
|
const r = reactive({
|
|
class: {
|
|
raw: markRaw(test),
|
|
reactive: test
|
|
},
|
|
plain: {
|
|
raw: markRaw(plain),
|
|
reactive: plain
|
|
}
|
|
})
|
|
|
|
expectType<Test<number>>(r.class.raw)
|
|
// @ts-expect-error it should unwrap
|
|
expectType<Test<number>>(r.class.reactive)
|
|
|
|
expectType<Ref<number>>(r.plain.raw.ref)
|
|
// @ts-expect-error it should unwrap
|
|
expectType<Ref<number>>(r.plain.reactive.ref)
|
|
})
|
|
|
|
describe('shallowReadonly ref unwrap', () => {
|
|
const r = shallowReadonly({ count: { n: ref(1) } })
|
|
// @ts-expect-error
|
|
r.count = 2
|
|
expectType<Ref>(r.count.n)
|
|
r.count.n.value = 123
|
|
})
|
|
|
|
// #3819
|
|
describe('should unwrap tuple correctly', () => {
|
|
const readonlyTuple = [ref(0)] as const
|
|
const reactiveReadonlyTuple = reactive(readonlyTuple)
|
|
expectType<Ref<number>>(reactiveReadonlyTuple[0])
|
|
|
|
const tuple: [Ref<number>] = [ref(0)]
|
|
const reactiveTuple = reactive(tuple)
|
|
expectType<Ref<number>>(reactiveTuple[0])
|
|
})
|