import { App } from 'vue'; /** * 安装方法 */ export interface InstallRecord { install: (app: App) => void; } /** * 组件名称 */ export interface NameRecord { name: string; } /** * 组件自定义名称 */ export interface ComponentNameRecord { componentName: string; } /** * 增加组件名称 */ export type AddNameRecord = T & NameRecord; /** * 增加组件自定义名称 */ export type AddComponentNameRecord = T & ComponentNameRecord; /** * 默认插槽参数 */ export type DefaultSlotProp = (props: Record) => any; /** * 默认插槽类型 */ export interface DefaultSlots { default: DefaultSlotProp; icon?: DefaultSlotProp; } /** * 合并类型为交叉类型 */ export type Merge = { [K in keyof T]: T[K]; } & { [K in keyof R]: R[K]; }; /** * 合并交叉类型 */ type MergeIntersection = Pick; /** * 提取必传属性 */ export type PickRequiredUnion = MergeIntersection>, Omit>>; /** * 除了提取的属性,其他都是必传属性 */ export type PickNotRequiredUnion = MergeIntersection, Required>>>; type NativeType = null | number | string | boolean | symbol | Function; type InferDefault = ((props: P) => T & {}) | (T extends NativeType ? T : never); export type InferDefaults = { [K in keyof T]?: InferDefault; }; /** * 提取枚举里面的基础类型 */ export type ExtractEnums = keyof { [K in keyof T as T[K] extends string | number | boolean ? K : never]: T[K]; }; /** * 移除 readonly */ export type Mutable = { -readonly [key in keyof T]: T[key]; }; export {};