diff --git a/packages/utils/props.ts b/packages/utils/props.ts index 1a6d5f10f7..268a7b6ea1 100644 --- a/packages/utils/props.ts +++ b/packages/utils/props.ts @@ -18,11 +18,11 @@ import type { PropType } from 'vue' values: ['small', 'medium'], validator: (val: unknown): val is number => typeof val === 'number', } as const) - @link for more explanation: https://github.com/element-plus/element-plus/pull/3341 + @link read more: https://github.com/element-plus/element-plus/pull/3341 */ export function buildProp< T = any, - R extends boolean = boolean, + R extends boolean = false, D extends T = T, C = never >({ @@ -42,25 +42,32 @@ export function buildProp< type?: any validator?: ((val: any) => val is C) | ((val: any) => boolean) } = {}) { + type DefaultType = typeof defaultValue + type HasDefaultValue = Exclude extends never ? false : true + return { type: type as PropType, - required: !!required, - default: defaultValue, + required: !!required as R, + + default: defaultValue as R extends true + ? never + : HasDefaultValue extends true + ? Exclude + : undefined, + validator: values || validator ? (val: unknown) => { - let vaild = false + let valid = false if (values) - vaild ||= ([...values, defaultValue] as unknown[]).includes(val) - if (validator) vaild ||= validator(val) - return vaild + valid ||= ([...values, defaultValue] as unknown[]).includes(val) + if (validator) valid ||= validator(val) + return valid } : undefined, } as const } -export function keyOf(arr: T) { - return Object.keys(arr) as Array -} +export const keyOf = (arr: T) => Object.keys(arr) as Array export const componentSize = ['large', 'medium', 'small', 'mini'] as const diff --git a/typings/components.d.ts b/typings/components.d.ts new file mode 100644 index 0000000000..3d755f3c1d --- /dev/null +++ b/typings/components.d.ts @@ -0,0 +1,96 @@ +// GlobalComponents for Volar +declare module 'vue' { + export interface GlobalComponents { + ElAffix: typeof import('element-plus')['ElAffix'] + ElAlert: typeof import('element-plus')['ElAlert'] + ElAside: typeof import('element-plus')['ElAside'] + ElAutocomplete: typeof import('element-plus')['ElAutocomplete'] + ElAvatar: typeof import('element-plus')['ElAvatar'] + ElBacktop: typeof import('element-plus')['ElBacktop'] + ElBadge: typeof import('element-plus')['ElBadge'] + ElBreadcrumb: typeof import('element-plus')['ElBreadcrumb'] + ElBreadcrumbItem: typeof import('element-plus')['ElBreadcrumbItem'] + ElButton: typeof import('element-plus')['ElButton'] + ElButtonGroup: typeof import('element-plus')['ElButtonGroup'] + ElCalendar: typeof import('element-plus')['ElCalendar'] + ElCard: typeof import('element-plus')['ElCard'] + ElCarousel: typeof import('element-plus')['ElCarousel'] + ElCarouselItem: typeof import('element-plus')['ElCarouselItem'] + ElCascader: typeof import('element-plus')['ElCascader'] + ElCascaderPanel: typeof import('element-plus')['ElCascaderPanel'] + ElCheckbox: typeof import('element-plus')['ElCheckbox'] + ElCheckboxButton: typeof import('element-plus')['ElCheckboxButton'] + ElCheckboxGroup: typeof import('element-plus')['ElCheckboxGroup'] + ElCol: typeof import('element-plus')['ElCol'] + ElCollapse: typeof import('element-plus')['ElCollapse'] + ElCollapseItem: typeof import('element-plus')['ElCollapseItem'] + ElCollapseTransition: typeof import('element-plus')['ElCollapseTransition'] + ElColorPicker: typeof import('element-plus')['ElColorPicker'] + ElContainer: typeof import('element-plus')['ElContainer'] + ElConfigProvider: typeof import('element-plus')['ElConfigProvider'] + ElDatePicker: typeof import('element-plus')['ElDatePicker'] + ElDialog: typeof import('element-plus')['ElDialog'] + ElDivider: typeof import('element-plus')['ElDivider'] + ElDrawer: typeof import('element-plus')['ElDrawer'] + ElDropdown: typeof import('element-plus')['ElDropdown'] + ElDropdownItem: typeof import('element-plus')['ElDropdownItem'] + ElDropdownMenu: typeof import('element-plus')['ElDropdownMenu'] + ElEmpty: typeof import('element-plus')['ElEmpty'] + ElFooter: typeof import('element-plus')['ElFooter'] + ElForm: typeof import('element-plus')['ElForm'] + ElFormItem: typeof import('element-plus')['ElFormItem'] + ElHeader: typeof import('element-plus')['ElHeader'] + ElIcon: typeof import('element-plus')['ElIcon'] + ElImage: typeof import('element-plus')['ElImage'] + ElImageViewer: typeof import('element-plus')['ElImageViewer'] + ElInput: typeof import('element-plus')['ElInput'] + ElInputNumber: typeof import('element-plus')['ElInputNumber'] + ElLink: typeof import('element-plus')['ElLink'] + ElMain: typeof import('element-plus')['ElMain'] + ElMenu: typeof import('element-plus')['ElMenu'] + ElMenuItem: typeof import('element-plus')['ElMenuItem'] + ElMenuItemGroup: typeof import('element-plus')['ElMenuItemGroup'] + ElOption: typeof import('element-plus')['ElOption'] + ElOptionGroup: typeof import('element-plus')['ElOptionGroup'] + ElPageHeader: typeof import('element-plus')['ElPageHeader'] + ElPagination: typeof import('element-plus')['ElPagination'] + ElPopconfirm: typeof import('element-plus')['ElPopconfirm'] + ElPopper: typeof import('element-plus')['ElPopper'] + ElProgress: typeof import('element-plus')['ElProgress'] + ElRadio: typeof import('element-plus')['ElRadio'] + ElRadioButton: typeof import('element-plus')['ElRadioButton'] + ElRadioGroup: typeof import('element-plus')['ElRadioGroup'] + ElRate: typeof import('element-plus')['ElRate'] + ElRow: typeof import('element-plus')['ElRow'] + ElScrollbar: typeof import('element-plus')['ElScrollbar'] + ElSelect: typeof import('element-plus')['ElSelect'] + ElSlider: typeof import('element-plus')['ElSlider'] + ElStep: typeof import('element-plus')['ElStep'] + ElSteps: typeof import('element-plus')['ElSteps'] + ElSubMenu: typeof import('element-plus')['ElSubMenu'] + ElSwitch: typeof import('element-plus')['ElSwitch'] + ElTabPane: typeof import('element-plus')['ElTabPane'] + ElTable: typeof import('element-plus')['ElTable'] + ElTableColumn: typeof import('element-plus')['ElTableColumn'] + ElTabs: typeof import('element-plus')['ElTabs'] + ElTag: typeof import('element-plus')['ElTag'] + ElTimePicker: typeof import('element-plus')['ElTimePicker'] + ElTimeSelect: typeof import('element-plus')['ElTimeSelect'] + ElTimeline: typeof import('element-plus')['ElTimeline'] + ElTimelineItem: typeof import('element-plus')['ElTimelineItem'] + ElTooltip: typeof import('element-plus')['ElTooltip'] + ElTransfer: typeof import('element-plus')['ElTransfer'] + ElTree: typeof import('element-plus')['ElTree'] + ElUpload: typeof import('element-plus')['ElUpload'] + ElSpace: typeof import('element-plus')['ElSpace'] + ElSkeleton: typeof import('element-plus')['ElSkeleton'] + ElSkeletonItem: typeof import('element-plus')['ElSkeletonItem'] + ElCheckTag: typeof import('element-plus')['ElCheckTag'] + ElDescriptions: typeof import('element-plus')['ElDescriptions'] + ElDescriptionsItem: typeof import('element-plus')['ElDescriptionsItem'] + ElResult: typeof import('element-plus')['ElResult'] + ElSelectV2: typeof import('element-plus')['ElSelectV2'] + } +} + +export {}