File tree 2 files changed +22
-6
lines changed
2 files changed +22
-6
lines changed Original file line number Diff line number Diff line change @@ -20,7 +20,8 @@ export interface Ref<T = any> {
20
20
_shallow ?: boolean
21
21
}
22
22
23
- export type ToRefs < T = any > = { [ K in keyof T ] : Ref < T [ K ] > }
23
+ export type ToRef < T > = T extends Ref ? T : Ref < UnwrapRef < T > >
24
+ export type ToRefs < T = any > = { [ K in keyof T ] : ToRef < T [ K ] > }
24
25
25
26
const convert = < T extends unknown > ( val : T ) : T =>
26
27
isObject ( val ) ? reactive ( val ) : val
@@ -30,9 +31,7 @@ export function isRef(r: any): r is Ref {
30
31
return Boolean ( r && r . __v_isRef === true )
31
32
}
32
33
33
- export function ref < T extends object > (
34
- value : T
35
- ) : T extends Ref ? T : Ref < UnwrapRef < T > >
34
+ export function ref < T extends object > ( value : T ) : ToRef < T >
36
35
export function ref < T > ( value : T ) : Ref < UnwrapRef < T > >
37
36
export function ref < T = any > ( ) : Ref < T | undefined >
38
37
export function ref ( value ?: unknown ) {
@@ -171,7 +170,7 @@ class ObjectRefImpl<T extends object, K extends keyof T> {
171
170
export function toRef < T extends object , K extends keyof T > (
172
171
object : T ,
173
172
key : K
174
- ) : Ref < T [ K ] > {
173
+ ) : ToRef < T [ K ] > {
175
174
return isRef ( object [ key ] )
176
175
? object [ key ]
177
176
: ( new ObjectRefImpl ( object , key ) as any )
Original file line number Diff line number Diff line change 6
6
unref ,
7
7
reactive ,
8
8
expectType ,
9
- proxyRefs
9
+ proxyRefs ,
10
+ toRef ,
11
+ toRefs
10
12
} from './index'
11
13
12
14
function plainType ( arg : number | Ref < number > ) {
@@ -154,3 +156,18 @@ const r2 = {
154
156
const p2 = proxyRefs ( r2 )
155
157
expectType < number > ( p2 . a )
156
158
expectType < Ref < string > > ( p2 . obj . k )
159
+
160
+ // toRef
161
+ const obj = {
162
+ a : 1 ,
163
+ b : ref ( 1 )
164
+ }
165
+ expectType < Ref < number > > ( toRef ( obj , 'a' ) )
166
+ expectType < Ref < number > > ( toRef ( obj , 'b' ) )
167
+
168
+ // toRefs
169
+ const objRefs = toRefs ( obj )
170
+ expectType < {
171
+ a : Ref < number >
172
+ b : Ref < number >
173
+ } > ( objRefs )
You can’t perform that action at this time.
0 commit comments