UNPKG

vuestic-ui

Version:
39 lines (38 loc) 1.87 kB
import type { ComponentOptionsBase, PropType, VNodeProps } from 'vue'; export type ComponentProps<T> = T extends new () => { $props: infer P; } ? NonNullable<P> : T extends (...args: any[]) => { __ctx?: { props: infer P; }; } ? NonNullable<P> : T extends (props: infer P, ...args: any) => any ? P : unknown; export type ComponentSlots<T> = T extends new () => { $slots: infer S; } ? NonNullable<S> : T extends (props: any, ctx: { slots: infer S; attrs: any; emit: any; }, ...args: any) => any ? NonNullable<S> : {}; export type UnKeyofString<T> = T extends infer E & ThisType<void> ? E : never; export type ExtractVolarEmitsType<T> = 'emits' extends keyof T ? UnKeyofString<(T['emits'] extends infer E | undefined ? E : never)> : never; export type ExtractVolarEmitTypes<T> = ExtractVolarEmitsType<T> extends string[] ? ExtractVolarEmitsType<T> : Array<keyof Exclude<ExtractVolarEmitsType<T>, string[]>>; export type ComponentEmit<T> = 'emits' extends keyof T ? ExtractVolarEmitTypes<T> : 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<any, any, any, any, any, any, any, any>; type MakeProps<T extends Record<string, any>> = { [K in keyof T]-?: { type: PropType<NonNullable<T[K]>>; required: true; default: T[K]; }; }; declare type ExtractDefineComponentPropsType<T> = MakeProps<Omit<ComponentProps<T>, 'class' | 'style' | keyof VNodeProps>>; export type ExtractComponentProps<T> = true extends boolean ? ExtractDefineComponentPropsType<T> : never; export type ExtractComponentEmits<T> = ComponentEmit<T>; export type ExtractComponentPropTypes<T extends DefineComponentOptions> = ComponentProps<T>; export {};