evil-vue
Version:
Evil vue3 writing, similar to angular writing Dependency injection
62 lines (61 loc) • 2.1 kB
TypeScript
import { SetupContext, VNodeChild } from 'vue';
export interface VueComponentStaticContructor {
new (...args: any[]): any;
/** 组件属性vue描述 */
defaultProps?: any;
/** 组件是否回退attrs */
inheritAttrs?: boolean;
/** 组件使用的指令 */
directives?: any;
/** 自定义解析组件 */
resolveComponent?: any;
[prop: string]: any;
}
/**vue lifecycle implements */
export interface VueLifecycle {
beforeMount?: () => void;
mounted?: () => void;
beforeUpdate?: () => void;
updated?: () => void;
beforeUnmount?: () => void;
unmounted?: () => void;
errorCaptured?: () => void;
renderTracked?: () => void;
renderTriggered?: () => void;
activated?: () => void;
deactivated?: () => void;
}
/**Decorator handler*/
export interface DecoratorHanlder {
key: string;
handler: (targetThis: any, setupReturn?: 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 TransformModelValue<T extends {}> = 'v-model:modelValue' extends keyof T ? Omit<T, 'v-model:modelValue'> & {
['v-model']?: T['v-model:modelValue'];
} : T;
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 {};