import type { ComponentOptionsBase, PropType, VNodeProps } from 'vue'; export type ComponentProps = T extends new () => { $props: infer P; } ? NonNullable

: T extends (...args: any[]) => { __ctx?: { props: infer P; }; } ? NonNullable

: T extends (props: infer P, ...args: any) => any ? P : unknown; export type ComponentSlots = T extends new () => { $slots: infer S; } ? NonNullable : T extends (props: any, ctx: { slots: infer S; attrs: any; emit: any; }, ...args: any) => any ? NonNullable : {}; export type UnKeyofString = T extends infer E & ThisType ? E : never; export type ExtractVolarEmitsType = 'emits' extends keyof T ? UnKeyofString<(T['emits'] extends infer E | undefined ? E : never)> : never; export type ExtractVolarEmitTypes = ExtractVolarEmitsType extends string[] ? ExtractVolarEmitsType : Array, string[]>>; export type ComponentEmit = 'emits' extends keyof T ? ExtractVolarEmitTypes : T extends { emits: infer E; } ? E : T extends new () => { $emit: infer E; } ? E : T extends (props: any, ctx: { emit: infer E; }, ...args: any) => any ? E : unknown; export type DefineComponentOptions = ComponentOptionsBase; type MakeProps> = { [K in keyof T]-?: { type: PropType>; required: true; default: T[K]; }; }; declare type ExtractDefineComponentPropsType = MakeProps, 'class' | 'style' | keyof VNodeProps>>; export type ExtractComponentProps = true extends boolean ? ExtractDefineComponentPropsType : never; export type ExtractComponentEmits = ComponentEmit; export type ExtractComponentPropTypes = ComponentProps; export {};