import { App, ComponentPublicInstance, DefineComponent, VNode } from 'vue' /** 组件类型 */ export type DefineComponentApp< P = { [key: string]: any }, E = { [key: string]: any }, S = { [key: string]: (...args: any[]) => any }, > = { new(): { $props: P & ComponentEventType $slots: S } } & { install(app: App): void } export type ComponentEventType = { [K in keyof T as K extends `on${Capitalize}` ? K : `on${Capitalize}`]?: OverloadReturnType< T[K], void > } /** 组件配置 */ export type DefineComponentOptions = DefineComponent

/** 组件实例 */ export type DefineComponentInstance = ComponentPublicInstance /** 组件通用的基础参数 */ export interface ComponentBaseOptions { xID: string } /** 组件事件参数 */ export interface ComponentEventParams { $event: Event } /** 全局事件默认参数 */ export interface ComponentEvent { $event: E stopPropagation(): void preventDefault(): void } /** 组件尺寸类型 */ export type ComponentSizeType = '' | 'lg' | 'sm' | 'base' /** 组件状态 */ export type ComponentStatusType = null | '' | 'primary' | 'success' | 'info' | 'warning' | 'danger' /** 组件样式类型 */ export type ComponentStyleType = Record /** 组件 className 类型 */ export type ComponentClassNameType = Record /** 组件插槽类型 */ export type ComponentSlotType = VNode | string | (VNode | string)[] /** 类型合并 */ export type Merge = T & Partial> /** 函数返回值类型重载 */ export type OverloadReturnType = T extends (...args: infer P) => any ? (...args: P) => R : never