zhengyiming
2025-02-10 958b79ed89b9e742540f714a80261d222c0fc09b
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
import { ToRefs } from 'vue';
import _ from 'lodash';
 
export function useVModel<P extends object, K extends keyof P>(
  props: P,
  key: K,
  emit: (name: string, ...args: any[]) => void
) {
  return computed({
    get() {
      return props[key];
    },
    set(v: any) {
      emit(`update:${key!.toString()}`, v);
    },
  });
}
 
export function useVModels<P extends object>(
  props: P,
  emit: (name: string, ...args: any[]) => void
): ToRefs<P> {
  const ret: any = {};
 
  for (const key in props) {
    ret[key] = useVModel(props, key, emit);
  }
  return ret;
}
 
export function useOmit<T extends object>(object: T, props: string[]) {
  return computed(() => _.omit(object, props));
}
 
export function useOmitProps<T extends object, P extends object>(props: T, restProps: P) {
  return useOmit(props, Object.keys(restProps));
}