feat(form): formList添加泛型推导name

master
LiuJiaNan 2026-04-24 16:20:30 +08:00
parent 1b3d5d08c4
commit 77f6113013
1 changed files with 22 additions and 8 deletions

View File

@ -58,7 +58,7 @@ export interface FormListUniqueProps {
/** 删除按钮的文本,默认 '删除' */ /** 删除按钮的文本,默认 '删除' */
removeButtonText?: string; removeButtonText?: string;
/** 表单配置项 */ /** 表单配置项 */
options: (field: FormListFieldData, fieldIndex: number, operations: FormListOperations) => FormOption[]; options: (field: FormListFieldData, fieldIndex: number, operations: FormListOperations) => FormListOption[];
/** 点击新增按钮时的默认值 */ /** 点击新增按钮时的默认值 */
addDefaultValue?: Store; addDefaultValue?: Store;
/** 点击新增按钮时插入的索引位置 */ /** 点击新增按钮时插入的索引位置 */
@ -78,11 +78,11 @@ type FormOptionProperty<IsOnlyForLabel extends boolean, IsCustomizeRender extend
/** /**
* *
*/ */
export interface FormOptionBase<Values = any, IsOnlyForLabel extends boolean = false, IsCustomizeRender extends boolean = false> { export interface FormOptionBase<Values = any, IsOnlyForLabel extends boolean = false, IsCustomizeRender extends boolean = false, Name = NamePath<Values>> {
/** React 需要的 key如果传递了唯一的 name则不需要 */ /** React 需要的 key如果传递了唯一的 name则不需要 */
key?: string; key?: string;
/** 表单项字段名 */ /** 表单项字段名 */
name?: NamePath<Values>; name?: Name;
/** 表单项标签 */ /** 表单项标签 */
label?: ReactNode; label?: ReactNode;
/** 占据栅格列数,默认 12 */ /** 占据栅格列数,默认 12 */
@ -110,7 +110,7 @@ export interface FormOptionBase<Values = any, IsOnlyForLabel extends boolean = f
/** 是否应该更新(用于表单联动) */ /** 是否应该更新(用于表单联动) */
shouldUpdate?: FormOptionProperty<IsOnlyForLabel, IsCustomizeRender, boolean | ((prevValues: Values, nextValues: Values, info: { source?: string }) => boolean)>; shouldUpdate?: FormOptionProperty<IsOnlyForLabel, IsCustomizeRender, boolean | ((prevValues: Values, nextValues: Values, info: { source?: string }) => boolean)>;
/** 依赖字段(用于表单联动) */ /** 依赖字段(用于表单联动) */
dependencies?: FormOptionProperty<IsOnlyForLabel, IsCustomizeRender, NamePath<Values>[]>; dependencies?: FormOptionProperty<IsOnlyForLabel, IsCustomizeRender, Name[]>;
/** 是否仅用于保存标签,不渲染到页面上,只在表单中保存数据,默认 false */ /** 是否仅用于保存标签,不渲染到页面上,只在表单中保存数据,默认 false */
onlyForLabel?: IsOnlyForLabel; onlyForLabel?: IsOnlyForLabel;
} }
@ -118,7 +118,7 @@ export interface FormOptionBase<Values = any, IsOnlyForLabel extends boolean = f
/** /**
* render * render
*/ */
export type FormOptionByRender<RenderType extends keyof FORM_ITEM_RENDER_TYPE_MAP, Values = any, IsOnlyForLabel extends boolean = false, IsCustomizeRender extends boolean = false> = FormOptionBase<Values, IsOnlyForLabel, IsCustomizeRender> & { export type FormOptionByRender<RenderType extends keyof FORM_ITEM_RENDER_TYPE_MAP, Values = any, IsOnlyForLabel extends boolean = false, IsCustomizeRender extends boolean = false, Name = NamePath<Values>> = FormOptionBase<Values, IsOnlyForLabel, IsCustomizeRender, Name> & {
/** 渲染类型(写字面量时 componentProps 会按该类型推导) */ /** 渲染类型(写字面量时 componentProps 会按该类型推导) */
render: RenderType; render: RenderType;
/** 传递给表单控件的属性,类型由 render 决定 */ /** 传递给表单控件的属性,类型由 render 决定 */
@ -136,7 +136,7 @@ export type FormOptionByRender<RenderType extends keyof FORM_ITEM_RENDER_TYPE_MA
/** /**
* render render input * render render input
*/ */
export type FormOptionDefault<Values = any, IsOnlyForLabel extends boolean = false, IsCustomizeRender extends boolean = false> = FormOptionBase<Values, IsOnlyForLabel, IsCustomizeRender> & { export type FormOptionDefault<Values = any, IsOnlyForLabel extends boolean = false, IsCustomizeRender extends boolean = false, Name = NamePath<Values>> = FormOptionBase<Values, IsOnlyForLabel, IsCustomizeRender, Name> & {
/** 渲染类型,默认 input */ /** 渲染类型,默认 input */
render?: "input" | undefined; render?: "input" | undefined;
/** 传递给 Input 的属性 */ /** 传递给 Input 的属性 */
@ -154,7 +154,7 @@ export type FormOptionDefault<Values = any, IsOnlyForLabel extends boolean = fal
/** /**
* render ReactNode 使 * render ReactNode 使
*/ */
export type FormOptionCustomRender<Values = any, IsOnlyForLabel extends boolean = false, IsCustomizeRender extends boolean = false> = FormOptionBase<Values, IsOnlyForLabel, IsCustomizeRender> & { export type FormOptionCustomRender<Values = any, IsOnlyForLabel extends boolean = false, IsCustomizeRender extends boolean = false, Name = NamePath<Values>> = FormOptionBase<Values, IsOnlyForLabel, IsCustomizeRender, Name> & {
/** 渲染类型,默认 ReactNode */ /** 渲染类型,默认 ReactNode */
render: ReactNode; render: ReactNode;
/** 传递给表单控件的属性,自定义渲染时不需要 */ /** 传递给表单控件的属性,自定义渲染时不需要 */
@ -170,7 +170,7 @@ export type FormOptionCustomRender<Values = any, IsOnlyForLabel extends boolean
}; };
/** /**
* *
*/ */
export type FormOption<Values = any> export type FormOption<Values = any>
= | FormOptionDefault<Values, false, false> = | FormOptionDefault<Values, false, false>
@ -183,6 +183,20 @@ export type FormOption<Values = any>
| FormOptionCustomRender<Values, false, true> | FormOptionCustomRender<Values, false, true>
| FormOptionCustomRender<Values, true, false>; | FormOptionCustomRender<Values, true, false>;
/**
* Form.List 使 [number, NamePath] name
*/
export type FormListOption<Values = any>
= | FormOptionDefault<Values, false, false, [number, NamePath<Values>]>
| FormOptionDefault<Values, false, true, [number, NamePath<Values>]>
| FormOptionDefault<Values, true, false, [number, NamePath<Values>]>
| { [K in keyof FORM_ITEM_RENDER_TYPE_MAP]: FormOptionByRender<K, Values, false, false, [number, NamePath<Values>]> }[keyof FORM_ITEM_RENDER_TYPE_MAP]
| { [K in keyof FORM_ITEM_RENDER_TYPE_MAP]: FormOptionByRender<K, Values, false, true, [number, NamePath<Values>]> }[keyof FORM_ITEM_RENDER_TYPE_MAP]
| { [K in keyof FORM_ITEM_RENDER_TYPE_MAP]: FormOptionByRender<K, Values, true, false, [number, NamePath<Values>]> }[keyof FORM_ITEM_RENDER_TYPE_MAP]
| FormOptionCustomRender<Values, false, false, [number, NamePath<Values>]>
| FormOptionCustomRender<Values, false, true, [number, NamePath<Values>]>
| FormOptionCustomRender<Values, true, false, [number, NamePath<Values>]>;
/** /**
* FormItemsRenderer * FormItemsRenderer
*/ */