fix(types): unwrap refs on public instance data (#3319)

fix #3315
This commit is contained in:
HcySunYang 2021-03-26 05:30:10 +08:00 committed by GitHub
parent 44166b43d9
commit 2b588cf1bc
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
4 changed files with 9 additions and 5 deletions

View File

@ -25,7 +25,8 @@ export {
markRaw, markRaw,
toRaw, toRaw,
ReactiveFlags, ReactiveFlags,
DeepReadonly DeepReadonly,
UnwrapNestedRefs
} from './reactive' } from './reactive'
export { export {
computed, computed,

View File

@ -57,7 +57,7 @@ function getTargetType(value: Target) {
} }
// only unwrap nested ref // only unwrap nested ref
type UnwrapNestedRefs<T> = T extends Ref ? T : UnwrapRef<T> export type UnwrapNestedRefs<T> = T extends Ref ? T : UnwrapRef<T>
/** /**
* Creates a reactive copy of the original object. * Creates a reactive copy of the original object.

View File

@ -20,7 +20,8 @@ import {
ReactiveFlags, ReactiveFlags,
track, track,
TrackOpTypes, TrackOpTypes,
ShallowUnwrapRef ShallowUnwrapRef,
UnwrapNestedRefs
} from '@vue/reactivity' } from '@vue/reactivity'
import { import {
ExtractComputedReturns, ExtractComputedReturns,
@ -195,7 +196,7 @@ export type ComponentPublicInstance<
): WatchStopHandle ): WatchStopHandle
} & P & } & P &
ShallowUnwrapRef<B> & ShallowUnwrapRef<B> &
D & UnwrapNestedRefs<D> &
ExtractComputedReturns<C> & ExtractComputedReturns<C> &
M & M &
ComponentCustomProperties ComponentCustomProperties

View File

@ -379,7 +379,8 @@ describe('type inference w/ options API', () => {
// here in data() - somehow that would mess up the inference // here in data() - somehow that would mess up the inference
expectType<number | undefined>(this.a) expectType<number | undefined>(this.a)
return { return {
c: this.a || 123 c: this.a || 123,
someRef: ref(0)
} }
}, },
computed: { computed: {
@ -418,6 +419,7 @@ describe('type inference w/ options API', () => {
expectType<number>(this.d) expectType<number>(this.d)
// computed get/set // computed get/set
expectType<number>(this.e) expectType<number>(this.e)
expectType<number>(this.someRef)
}, },
methods: { methods: {
doSomething() { doSomething() {