UNPKG

vue3-oop-static

Version:
72 lines (71 loc) 2.94 kB
import { InjectionKey, Prop, SetupContext, VNodeChild } from 'vue'; import { StaticProvider } from 'static-injector/import/typings/di/interface/provider'; export interface VueComponentStaticContructor { ɵfac?: (...args: any[]) => any; ɵprov?: StaticProvider; new (...args: any[]): any; /** 组件显示名称 */ displayName?: string; /** 组件属性vue描述 */ defaultProps?: any; /** 组件是否回退attrs */ inheritAttrs?: boolean; /** 组件使用的指令 */ directives?: any; /** 组件作为服务的key */ ProviderKey?: symbol | string | number | InjectionKey<any>; /** 组件是否作为全局服务 */ globalStore?: boolean; /** 自定义解析组件 */ resolveComponent?: any; providers?: StaticProvider[]; asStore?: boolean; [prop: string]: any; } /** * 装饰器处理 */ export interface Hanlder { key: string; handler: (targetThis: any) => void; } declare type DefaultSlots = { default(): VNodeChild; }; declare type MixDefaultSlots<T extends {}> = 'default' extends keyof T ? {} : DefaultSlots; export declare type WithVSlots<T extends {}> = { 'v-slots'?: 'slots' extends keyof T ? Partial<T['slots'] & { $stable: boolean; } & MixDefaultSlots<T['slots']>> : Partial<{ $stable: boolean; default(): VNodeChild; }>; }; export declare type WithSlotTypes<T extends {}> = Omit<SetupContext, 'slots'> & { slots: 'slots' extends keyof T ? Partial<T['slots'] & MixDefaultSlots<T['slots']>> : Partial<{ default(): VNodeChild; }>; }; declare type ModelProps<T extends {}> = Exclude<{ [Prop in keyof T]: T extends { [k in Prop as `onUpdate:${k & string}`]?: any; } ? Prop : never; }[keyof T], undefined>; export declare type WithVModel<T extends {}, U extends keyof T = ModelProps<T>> = TransformModelValue<{ [k in U as `v-model:${k & string}`]?: T[k] | [T[k], string[]]; }>; export declare type TransformModelValue<T extends {}> = 'v-model:modelValue' extends keyof T ? Omit<T, 'v-model:modelValue'> & { ['v-model']?: T['v-model:modelValue']; } : T; export declare type ComponentProps<T extends {}> = ComponentPropsArray<T> | ComponentPropsObject<T>; export declare type ComponentPropsObject<T extends {}> = { [U in keyof Omit<T, 'slots'>]-?: Prop<any>; }; export declare type ComponentPropsArray<T extends {}> = UnionToTuple<keyof Omit<T, 'slots'>>; export declare type ComponentSlots<T extends { props: any; }> = T['props']['v-slots']; /** 为了阻止ts把不相关的类也解析到metadata数据中,用这个工具类型包装一下类 */ export declare type ClassType<T> = T; export declare type UnionToTuple<T> = ((T extends any ? (t: T) => T : never) extends infer U ? (U extends any ? (u: U) => any : never) extends (v: infer V) => any ? V : never : never) extends (_: any) => infer W ? [...UnionToTuple<Exclude<T, W>>, W] : []; export {};