Skip to content

Commit 44448fd

Browse files
author
Pick
authored
types(reactivity): add dts for proxyRefs & improve typings (#1786)
1 parent 5002ab5 commit 44448fd

File tree

3 files changed

+32
-6
lines changed

3 files changed

+32
-6
lines changed

packages/reactivity/src/baseHandlers.ts

+4-4
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
import { reactive, readonly, toRaw, ReactiveFlags } from './reactive'
1+
import { reactive, readonly, toRaw, ReactiveFlags, Target } from './reactive'
22
import { TrackOpTypes, TriggerOpTypes } from './operations'
33
import { track, trigger, ITERATE_KEY } from './effect'
44
import {
@@ -41,7 +41,7 @@ const arrayInstrumentations: Record<string, Function> = {}
4141
})
4242

4343
function createGetter(isReadonly = false, shallow = false) {
44-
return function get(target: object, key: string | symbol, receiver: object) {
44+
return function get(target: Target, key: string | symbol, receiver: object) {
4545
if (key === ReactiveFlags.IS_REACTIVE) {
4646
return !isReadonly
4747
} else if (key === ReactiveFlags.IS_READONLY) {
@@ -50,8 +50,8 @@ function createGetter(isReadonly = false, shallow = false) {
5050
key === ReactiveFlags.RAW &&
5151
receiver ===
5252
(isReadonly
53-
? (target as any)[ReactiveFlags.READONLY]
54-
: (target as any)[ReactiveFlags.REACTIVE])
53+
? target[ReactiveFlags.READONLY]
54+
: target[ReactiveFlags.REACTIVE])
5555
) {
5656
return target
5757
}

packages/reactivity/src/reactive.ts

+1-1
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,7 @@ export const enum ReactiveFlags {
2121
READONLY = '__v_readonly'
2222
}
2323

24-
interface Target {
24+
export interface Target {
2525
[ReactiveFlags.SKIP]?: boolean
2626
[ReactiveFlags.IS_REACTIVE]?: boolean
2727
[ReactiveFlags.IS_READONLY]?: boolean

test-dts/ref.test-d.ts

+27-1
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,12 @@
1-
import { Ref, ref, isRef, unref, reactive, expectType } from './index'
1+
import {
2+
Ref,
3+
ref,
4+
isRef,
5+
unref,
6+
reactive,
7+
expectType,
8+
proxyRefs
9+
} from './index'
210

311
function plainType(arg: number | Ref<number>) {
412
// ref coercing
@@ -111,3 +119,21 @@ const state = reactive({
111119
})
112120

113121
expectType<string>(state.foo.label)
122+
123+
// proxyRefs: should return `reactive` directly
124+
const r1 = reactive({
125+
k: 'v'
126+
})
127+
const p1 = proxyRefs(r1)
128+
expectType<typeof r1>(p1)
129+
130+
// proxyRefs: `ShallowUnwrapRef`
131+
const r2 = {
132+
a: ref(1),
133+
obj: {
134+
k: ref('foo')
135+
}
136+
}
137+
const p2 = proxyRefs(r2)
138+
expectType<number>(p2.a)
139+
expectType<Ref<string>>(p2.obj.k)

0 commit comments

Comments
 (0)