From 6bb79180fc798b1a0b1a6c22f7c13ddb3a45a3b5 Mon Sep 17 00:00:00 2001 From: xk <1175047471@qq.com> Date: 星期四, 21 十二月 2023 15:59:32 +0800 Subject: [PATCH] feat(BasicForm): Improve ts types for BasicForm (#3426) --- src/components/Form/src/types/form.ts | 22 ++++++++++++++-------- 1 files changed, 14 insertions(+), 8 deletions(-) diff --git a/src/components/Form/src/types/form.ts b/src/components/Form/src/types/form.ts index 0838de8..7beabe2 100644 --- a/src/components/Form/src/types/form.ts +++ b/src/components/Form/src/types/form.ts @@ -2,7 +2,7 @@ import type { VNode, CSSProperties } from 'vue'; import type { ButtonProps as AntdButtonProps } from '@/components/Button'; import type { FormItem } from './formItem'; -import type { ColEx, ComponentType } from './'; +import type { ColEx, ComponentType, ComponentProps } from './'; import type { TableActionType } from '@/components/Table/src/types/table'; import type { RowProps } from 'ant-design-vue/lib/grid/Row'; @@ -130,7 +130,7 @@ [key: string]: any; }; -interface BaseFormSchema { +interface BaseFormSchema<T extends ComponentType = any> { // Field name field: string; // Extra Fields name[] @@ -161,8 +161,8 @@ tableAction: TableActionType; formActionType: FormActionType; formModel: Recordable; - }) => Recordable) - | object; + }) => ComponentProps[T]) + | ComponentProps[T]; // Required required?: boolean | ((renderCallbackParams: RenderCallbackParams) => boolean); @@ -224,17 +224,23 @@ dynamicRules?: (renderCallbackParams: RenderCallbackParams) => Rule[]; } -export interface ComponentFormSchema extends BaseFormSchema { +export interface ComponentFormSchema<T extends ComponentType = any> extends BaseFormSchema<T> { // render component - component: ComponentType; + component: T; + // fix: Object literal may only specify known properties, and 'slot' does not exist in type 'ComponentFormSchema'. + slot?: string; } export interface SlotFormSchema extends BaseFormSchema { - // Custom slot, in from-item + // Custom slot, in form-item slot: string; } -export type FormSchema = ComponentFormSchema | SlotFormSchema; +type ComponentFormSchemaType<T extends ComponentType = ComponentType> = T extends any + ? ComponentFormSchema<T> + : never; + +export type FormSchema = ComponentFormSchemaType | SlotFormSchema; export type FormSchemaInner = Partial<ComponentFormSchema> & Partial<SlotFormSchema> & -- Gitblit v1.8.0