refactor(table): 优化表格组件类型定义和导出

- 引入更严格的嵌套字段路径类型提示
- 定义支持嵌套字段路径的TableDataIndex类型
- 重构TableColumn类型,支持多级子列
- 调整TableProps类型,明确默认泛型参数
- 修改Table组件声明,适配泛型默认值
- 在FormItemsRenderer中将key类型改为React.Key,提高类型兼容性
1.0
LiuJiaNan 2026-08-25 14:43:57 +08:00
parent 9719a46751
commit ac6db2113f
2 changed files with 29 additions and 7 deletions

View File

@ -3,7 +3,7 @@ import type { FormItemProps, Rule } from "antd/es/form";
import type { FormListFieldData } from "antd/es/form/FormList";
import type { Gutter } from "antd/es/grid/row";
import type { NamePath } from "rc-field-form/lib/interface";
import type { CSSProperties, ReactElement, ReactNode } from "react";
import type { CSSProperties, Key, ReactElement, ReactNode } from "react";
import type { FORM_ITEM_RENDER_TYPE_MAP } from "../../enum/formItemRender";
import type { DeepPartial } from "./FormBuilder";
@ -98,7 +98,7 @@ export interface FormOptionBase<
Dependencies = NamePath<Values>,
> {
/** React 需要的 key如果传递了唯一的 name则不需要 */
key?: string;
key?: Key;
/** 表单项字段名 */
name?: Name;
/** 表单项标签 */

View File

@ -1,11 +1,33 @@
import type { ProTableProps } from "@ant-design/pro-table";
import type { TableProps as AntdTableProps } from "antd";
import type { ProColumns, ProTableProps } from "@ant-design/pro-components";
import type { TableProps as AntdTableProps, TableColumnType } from "antd";
import type { FC } from "react";
/** 保留 Ant Design 推导的嵌套元组路径,移除宽泛字符串和普通数组 */
type StrictTableDataIndex<DataIndex> = DataIndex extends string
? never
: DataIndex extends readonly unknown[]
? number extends DataIndex["length"] ? never : DataIndex
: DataIndex extends number ? DataIndex : never;
/** 表格字段索引,支持一级字段和嵌套字段路径提示 */
export type TableDataIndex<DataSource>
= | Extract<keyof DataSource, string | number>
| StrictTableDataIndex<NonNullable<TableColumnType<DataSource>["dataIndex"]>>;
/** 表格列配置 */
export type TableColumn<DataSource, ValueType = "text"> = Omit<ProColumns<DataSource, ValueType>, "children" | "dataIndex"> & {
/** 当前列对应的数据字段 */
dataIndex?: TableDataIndex<DataSource>;
/** 多级表头子列 */
children?: TableColumn<DataSource, ValueType>[];
};
/**
* TablePro
* Table
*/
export type TableProps<DataSource, U, ValueType> = Omit<AntdTableProps, "columns"> & ProTableProps<DataSource, U, ValueType> & {
export type TableProps<DataSource, U = Record<string, unknown>, ValueType = "text"> = Omit<AntdTableProps<DataSource>, "columns"> & Omit<ProTableProps<DataSource, U, ValueType>, "columns"> & {
/** 表格列配置 */
columns: TableColumn<DataSource, ValueType>[];
/** 当一个路由下存在多个表格的情况下 需要给每一个表格设置一个唯一存储索引 若没有设置则使用默认索引,请注意缓存数据会被覆盖 */
storeIndex?: string;
/** 是否禁用内容区滚动,默认 false */
@ -25,5 +47,5 @@ export type TableProps<DataSource, U, ValueType> = Omit<AntdTableProps, "columns
/**
*
*/
declare const Table: <DataSource, U, ValueType = "text">(props: TableProps<DataSource, U, ValueType>) => ReturnType<FC>;
declare const Table: <DataSource, U = Record<string, unknown>, ValueType = "text">(props: TableProps<DataSource, U, ValueType>) => ReturnType<FC>;
export default Table;