fix(types/reactivity): fix ref type inference on nested reactive properties with .value

fix #1111
This commit is contained in:
Evan You 2020-05-04 08:51:01 -04:00
parent f40f3a0e95
commit bc1f097e29
2 changed files with 16 additions and 3 deletions

View File

@ -5,11 +5,15 @@ import { reactive, isProxy, toRaw } from './reactive'
import { ComputedRef } from './computed' import { ComputedRef } from './computed'
import { CollectionTypes } from './collectionHandlers' import { CollectionTypes } from './collectionHandlers'
const RefSymbol = Symbol()
export interface Ref<T = any> { export interface Ref<T = any> {
/** /**
* @internal * Type differentiator only.
* We need this to be in public d.ts but don't want it to show up in IDE
* autocomplete, so we use a private Symbol instead.
*/ */
__v_isRef: true [RefSymbol]: true
value: T value: T
} }

View File

@ -1,5 +1,5 @@
import { expectType } from 'tsd' import { expectType } from 'tsd'
import { Ref, ref, isRef, unref } from './index' import { Ref, ref, isRef, unref, reactive } from './index'
function plainType(arg: number | Ref<number>) { function plainType(arg: number | Ref<number>) {
// ref coercing // ref coercing
@ -84,3 +84,12 @@ function withSymbol() {
} }
withSymbol() withSymbol()
const state = reactive({
foo: {
value: 1,
label: 'bar'
}
})
expectType<string>(state.foo.label)