fix(types): keep the original type when unwrapping markRaw (#3791)
This commit is contained in:
6
test-dts/index.d.ts
vendored
6
test-dts/index.d.ts
vendored
@@ -9,9 +9,9 @@ export function expectType<T>(value: T): void
|
||||
export function expectError<T>(value: T): void
|
||||
export function expectAssignable<T, T2 extends T = T>(value: T2): void
|
||||
|
||||
export type IsUnion<T, U extends T = T> = (T extends any
|
||||
? (U extends T ? false : true)
|
||||
: never) extends false
|
||||
export type IsUnion<T, U extends T = T> = (
|
||||
T extends any ? (U extends T ? false : true) : never
|
||||
) extends false
|
||||
? false
|
||||
: true
|
||||
|
||||
|
||||
@@ -1,5 +1,14 @@
|
||||
import { shallowReadonly } from '@vue/reactivity'
|
||||
import { ref, readonly, describe, expectError, expectType, Ref } from './index'
|
||||
import {
|
||||
ref,
|
||||
readonly,
|
||||
shallowReadonly,
|
||||
describe,
|
||||
expectError,
|
||||
expectType,
|
||||
Ref,
|
||||
reactive,
|
||||
markRaw
|
||||
} from './index'
|
||||
|
||||
describe('should support DeepReadonly', () => {
|
||||
const r = readonly({ obj: { k: 'v' } })
|
||||
@@ -15,6 +24,35 @@ describe('readonly ref', () => {
|
||||
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
|
||||
|
||||
Reference in New Issue
Block a user