vue3-oop-static
Version:
72 lines (71 loc) • 2.94 kB
TypeScript
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 {};