wip: improve ref typing

This commit is contained in:
Evan You 2019-08-16 09:54:57 -04:00
parent caba6d5c9e
commit 96d65e1ab5
2 changed files with 12 additions and 2 deletions

View File

@ -61,4 +61,14 @@ describe('observer/value', () => {
expect(dummy2).toBe(3) expect(dummy2).toBe(3)
expect(dummy3).toBe(3) expect(dummy3).toBe(3)
}) })
it('should unwrap nested values in types', () => {
const a = {
b: ref(0)
}
const c = ref(a)
expect(typeof (c.value.b + 1)).toBe('number')
})
}) })

View File

@ -6,7 +6,7 @@ import { reactive } from './reactive'
export const knownValues = new WeakSet() export const knownValues = new WeakSet()
export interface Ref<T> { export interface Ref<T> {
value: T value: T extends Ref<infer V> ? Ref<V> : UnwrapRef<T>
} }
const convert = (val: any): any => (isObject(val) ? reactive(val) : val) const convert = (val: any): any => (isObject(val) ? reactive(val) : val)
@ -24,7 +24,7 @@ export function ref<T>(raw: T): Ref<T> {
} }
} }
knownValues.add(v) knownValues.add(v)
return v return v as any
} }
export function isRef(v: any): v is Ref<any> { export function isRef(v: any): v is Ref<any> {