types(reactivity): add dts for proxyRefs & improve typings (#1786)

This commit is contained in:
Pick 2020-08-15 05:37:36 +08:00 committed by GitHub
parent 5002ab53d6
commit 44448fdd22
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
3 changed files with 32 additions and 6 deletions

View File

@ -1,4 +1,4 @@
import { reactive, readonly, toRaw, ReactiveFlags } from './reactive'
import { reactive, readonly, toRaw, ReactiveFlags, Target } from './reactive'
import { TrackOpTypes, TriggerOpTypes } from './operations'
import { track, trigger, ITERATE_KEY } from './effect'
import {
@ -41,7 +41,7 @@ const arrayInstrumentations: Record<string, Function> = {}
})
function createGetter(isReadonly = false, shallow = false) {
return function get(target: object, key: string | symbol, receiver: object) {
return function get(target: Target, key: string | symbol, receiver: object) {
if (key === ReactiveFlags.IS_REACTIVE) {
return !isReadonly
} else if (key === ReactiveFlags.IS_READONLY) {
@ -50,8 +50,8 @@ function createGetter(isReadonly = false, shallow = false) {
key === ReactiveFlags.RAW &&
receiver ===
(isReadonly
? (target as any)[ReactiveFlags.READONLY]
: (target as any)[ReactiveFlags.REACTIVE])
? target[ReactiveFlags.READONLY]
: target[ReactiveFlags.REACTIVE])
) {
return target
}

View File

@ -21,7 +21,7 @@ export const enum ReactiveFlags {
READONLY = '__v_readonly'
}
interface Target {
export interface Target {
[ReactiveFlags.SKIP]?: boolean
[ReactiveFlags.IS_REACTIVE]?: boolean
[ReactiveFlags.IS_READONLY]?: boolean

View File

@ -1,4 +1,12 @@
import { Ref, ref, isRef, unref, reactive, expectType } from './index'
import {
Ref,
ref,
isRef,
unref,
reactive,
expectType,
proxyRefs
} from './index'
function plainType(arg: number | Ref<number>) {
// ref coercing
@ -111,3 +119,21 @@ const state = reactive({
})
expectType<string>(state.foo.label)
// proxyRefs: should return `reactive` directly
const r1 = reactive({
k: 'v'
})
const p1 = proxyRefs(r1)
expectType<typeof r1>(p1)
// proxyRefs: `ShallowUnwrapRef`
const r2 = {
a: ref(1),
obj: {
k: ref('foo')
}
}
const p2 = proxyRefs(r2)
expectType<number>(p2.a)
expectType<Ref<string>>(p2.obj.k)