1
1
import { isDef } from '@vueuse/shared'
2
- import type { UnwrapRef } from 'vue-demi'
2
+ import type { Ref , UnwrapRef , WritableComputedRef } from 'vue-demi'
3
3
import { computed , getCurrentInstance , isVue2 , ref , watch } from 'vue-demi'
4
4
import type { CloneFn } from '../useCloned'
5
5
import { cloneFnJSON } from '../useCloned'
6
6
7
- export interface UseVModelOptions < T > {
7
+ export interface UseVModelOptions < T , Passive extends boolean = false > {
8
8
/**
9
9
* When passive is set to `true`, it will use `watch` to sync with props and ref.
10
10
* Instead of relying on the `v-model` or `.sync` to work.
11
11
*
12
12
* @default false
13
13
*/
14
- passive ?: boolean
14
+ passive ?: Passive
15
15
/**
16
16
* When eventName is set, it's value will be used to overwrite the emit event name.
17
17
*
@@ -48,6 +48,20 @@ export interface UseVModelOptions<T> {
48
48
shouldEmit ?: ( v : T ) => boolean
49
49
}
50
50
51
+ export function useVModel < P extends object , K extends keyof P , Name extends string > (
52
+ props : P ,
53
+ key ?: K ,
54
+ emit ?: ( name : Name , ...args : any [ ] ) => void ,
55
+ options ?: UseVModelOptions < P [ K ] , false > ,
56
+ ) : WritableComputedRef < P [ K ] >
57
+
58
+ export function useVModel < P extends object , K extends keyof P , Name extends string > (
59
+ props : P ,
60
+ key ?: K ,
61
+ emit ?: ( name : Name , ...args : any [ ] ) => void ,
62
+ options ?: UseVModelOptions < P [ K ] , true > ,
63
+ ) : Ref < UnwrapRef < P [ K ] > >
64
+
51
65
/**
52
66
* Shorthand for v-model binding, props + emit -> ref
53
67
*
@@ -56,11 +70,11 @@ export interface UseVModelOptions<T> {
56
70
* @param key (default 'value' in Vue 2 and 'modelValue' in Vue 3)
57
71
* @param emit
58
72
*/
59
- export function useVModel < P extends object , K extends keyof P , Name extends string > (
73
+ export function useVModel < P extends object , K extends keyof P , Name extends string , Passive extends boolean > (
60
74
props : P ,
61
75
key ?: K ,
62
76
emit ?: ( name : Name , ...args : any [ ] ) => void ,
63
- options : UseVModelOptions < P [ K ] > = { } ,
77
+ options : UseVModelOptions < P [ K ] , Passive > = { } ,
64
78
) {
65
79
const {
66
80
clone = false ,
0 commit comments