gaoluyang
2026-06-24 c0cb161bb52ce0fbdce5c66ec391d107c75e2452
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
import type { Component } from 'vue';
 
import type { DescInstance, DescriptionProps } from './typing';
 
import { h, reactive } from 'vue';
 
import Description from './description.vue';
 
export function useDescription(options?: Partial<DescriptionProps>) {
  const propsState = reactive<Partial<DescriptionProps>>(options || {});
 
  const api: DescInstance = {
    setDescProps: (descProps: Partial<DescriptionProps>): void => {
      Object.assign(propsState, descProps);
    },
  };
 
  // 创建一个包装组件,将 propsState 合并到 props 中
  const DescriptionWrapper: Component = {
    name: 'UseDescription',
    inheritAttrs: false,
    setup(_props, { attrs, slots }) {
      return () => {
        // @ts-expect-error - 避免类型实例化过深
        return h(Description, { ...propsState, ...attrs }, slots);
      };
    },
  };
 
  return [DescriptionWrapper, api] as const;
}