import { Ref, ObjectEmitsOptions } from '@wakeadmin/demi'; export type PickOnEvent = { [K in keyof T as K extends `on${string}` ? K : never]: T[K]; }; /** * 选择 _ 开始的属性 */ export type PickUnderScore = { [K in keyof T as K extends `_${string}` ? K : never]: T[K]; }; /** * 忽略掉 _ 开始的属性 */ export type OmitUnderScore = Omit>; type TrimOnPrefix = K extends `on${infer E}` ? E extends `${infer F}${infer L}` ? `${Lowercase}${L}` : E : K; type TrimRenderPrefix = K extends `render${infer E}` ? E extends `${infer F}${infer L}` ? `${Lowercase}${L}` : E : K; type TrimOnEvents = { [K in keyof T as TrimOnPrefix]: T[K]; }; type AddOnPrefix = K extends `on${infer E}` ? K : K extends `${infer F}${infer L}` ? `on${Uppercase}${L}` : `on${Uppercase}`; /** * 将事件名称都转换成`onXxxx`格式 */ export type ToJSXEmitDefinition = { [K in keyof T as AddOnPrefix]: T[K]; }; /** * 将 on* 类型的事件转换为 h 库的 emit 类型格式 */ export type ToHEmitDefinition = TrimOnEvents>; type TrimRenderFunctionAndExtraParam = { [K in keyof T as TrimRenderPrefix]: T[K] extends (a: void) => any ? never : T[K] extends (a: infer R, ...args: any[]) => any ? R : never; }; /** * 将 render* 类型的渲染函数转换未 h 库的 slot 类型格式 */ export type ToHSlotDefinition = TrimRenderFunctionAndExtraParam>; type TransformRenderFunctionToSlotDefinition = { [K in keyof T as TrimRenderPrefix]: T[K]; }; /** * 将 render* 类型的渲染函数转换为 volar 类型声明 */ export interface ToVolarSlotDefinition { /** * @private Volar 用于推断插槽类型 */ $slots: TransformRenderFunctionToSlotDefinition>; } type UnionToIntersection = (Union extends any ? (arg: Union) => void : never) extends (arg: infer I) => void ? I : never; /** * 将 on* 类型渲染转换为 volar $emit 类型 */ export interface ToVolarEmitDefinition, Event extends keyof HEmit = keyof HEmit> { $emit: UnionToIntersection<{ [key in Event]: HEmit[key] extends (...args: infer Args) => any ? (event: key, ...args: Args) => void : (event: key, ...args: any[]) => void; }[Event]>; } /** * 自定义组件实例 */ export interface OurComponentInstance extends ToVolarSlotDefinition, ToVolarEmitDefinition { $props: Props & { 'v-slots'?: Partial>>; ref?: Ref | string; }; } export type DefineOurComponent = new (props: Props) => OurComponentInstance; /** * 获取Set类型里函数的参数 */ export type GetParameterInSet> = S extends Set any> ? Parameters : never; type Without = { [K in keyof T]?: never; }; export type XOR = (Without & U) | (Without & T); export type Prettify = { [K in keyof T]: T[K]; } & {}; export {}; //# sourceMappingURL=types.d.ts.map