Skip to content

TS 类型

这里只列出在配置项中有关联的 TS 类型,并非所有表单 TS 类型。

BaseValueType

表单数据类型

ts
export type BaseValueType =
  | string
  | number
  | boolean
  | null
  | undefined
  | Date
  | string[]
  | number[]
  | boolean[]
  | Date[]
  | [Date, Date]
  | [number, number]
  | [string, string]
  | string[][]
  | number[][]
  | Record<any, any>;

FormItemRenderParams

render、插槽参数类型

ts
export interface FormItemRenderParams<T = Record<string, any>> {
  /**
   * 当前值
   */
  value: unknown;
  /**
   * 当前表单数据
   */
  model: T;
  /**
   * 当前描述列表标签
   */
  label: string;
  /**
   * 字典枚举
   */
  options: ElOption[];
  /**
   * el 组件的 props
   */
  elProps: Recordable;
  /**
   * el-form-item 的 props
   */
  formItemProps: Partial<FormItemProps>;
  /**
   * 更新当前 prop 的表单值函数
   */
  update: (value: unknown) => void;
  /**
   * 当前列配置
   */
  column: FormItemColumnProps<T>;
}

OptionsParams

options 字典数据参数。

ts
export interface OptionsParams<T = Record<string, any>> {
  /**
   * 表单数据
   */
  model?: T;
  /**
   * 字典枚举数据缓存,key 为 prop,value 为 options
   */
  optionsMap?: Map<string, Record<string, any>>;
  /**
   * 当前列配置
   */
  prop?: string;
  /**
   * 额外拓展
   */
  [key: string]: any;
}

ElOption

字典数据类型。

ts
export interface ElOption {
  /**
   * 选项框显示的文字
   */
  label?: string;
  /**
   * 选项框值
   */
  value?: any;
  /**
   * 是否禁用此选项
   */
  disabled?: boolean;
  /**
   * 为树形选择时,可以通过 children 属性指定子选项
   */
  children?: ElOption[];
  /**
   * 拓展其他选项,如 ProTable 也是用该类型,可以接收 tagType、tagEffect 等 ElTag 相关属性
   */
  [key: string]: any;
}

ElOptionField

自定义字典的 key。

ts
export type ElOptionField = {
  label?: string;
  value?: string;
  disabled?: string;
  children?: string;
};

ElProps

el 组件的 Props 类型。

ts
export type ElProps =
  | InputProps
  | InputNumberProps
  | ExtractPropTypes<SelectProps>
  | ExtractPropTypes<SelectV2Props>
  | TreeProps
  | CustomTreeProps
  | CascaderProps
  | DatePickerProps
  | TimePickerDefaultProps
  | TimeSelectProps
  | SwitchProps
  | SliderProps
  | RadioProps
  | RadioGroupProps
  | RadioButtonProps
  | CheckboxProps
  | CheckboxGroupProps
  | AutocompleteProps
  | RateProps
  | ColorPickerProps
  | TransferProps
  | DividerProps
  | UploadProps
  | { labelSize?: "default" | "small" | "large" } // ElDivider 字体大小
  | Record<string, any>;

FormColumn

ProForm 表单配置项。

ts
export interface FormColumn<T = Recordable> extends FormItemColumnProps<T> {
  /**
   * ElFormItem 的 prop 属性,当表单数据 model 为对象时,prop 也是 model 的 key
   */
  prop: NonNullable<FormItemColumnProps<T>["prop"]>;
  /**
   * ElCol Props
   */
  colProps?: MaybeRef<Partial<ColProps>>;
  /**
   * 表单属性的默认值
   */
  defaultValue?:
    | MaybeRef<BaseValueType>
    | Promise<BaseValueType>
    | ((defaultValueParams: DefaultValueParams) => BaseValueType | Promise<BaseValueType>);
  /**
   * 表单排序(从大到小)
   */
  order?: number;
  /**
   * 是否销毁表单,true 销毁,false 不销毁,类似于 v-if
   * @default false
   */
  destroy?: MaybeRef<boolean> | ((model: T) => MaybeRef<boolean>);
  /**
   * 是否隐藏表单,true 隐藏,false 不隐藏,类似于 v-show
   *
   * @default false
   */
  hidden?: MaybeRef<boolean> | ((model: T) => MaybeRef<boolean>);
  /**
   * 指定 Options 的 key,如果设置了则优先从缓存获取对于 key 的 Options 数据
   */
  optionsProp?: string;
  /**
   * 其他拓展
   */
  [key: string]: any;
}

FormItemColumnProps

ProFormItem 的 props

ts
export interface FormItemColumnProps<T = Record<string, any>> {
  /**
   * ElFormItem 的 prop 属性,当表单数据 model 为对象时,prop 也是 model 的 key
   */
  prop?: string;
  /**
   * 标签,ElFormItem 的 label 属性
   */
  label?: MaybeRefOrGetter<string | number>;
  /**
   * 是否显示 label
   *
   * @default true
   */
  showLabel?: MaybeRefOrGetter<boolean>;
  /**
   * 表单组件宽度
   */
  width?: MaybeRefOrGetter<string | number>;
  /**
   * 使用的表单组件名
   *
   * @default 'ElInput'
   */
  el?: MaybeRefOrGetter<FormElType>;
  /**
   * 表单组件的 Props,即会透传到表单组件
   */
  elProps?: MaybeRefOrGetter<ElProps> | ((model: T) => ElProps);
  /**
   * 表单组件的插槽
   */
  elSlots?: {
    [slotName: string]: (
      data: Omit<FormItemColumnProps, "options" | "label" | "elProps" | "formItemProps"> & {
        value: unknown;
        model: T;
        options: ElOption[];
        label: string;
        elProps: UnwrapRef<FormItemColumnProps["elProps"]>;
        formItemProps: UnwrapRef<FormItemColumnProps["formItemProps"]>;
      }
    ) => RenderTypes;
  };
  /**
   * 字典枚举数据
   */
  options?:
    | string[]
    | MaybeRef<ElOption[]>
    | Promise<ElOption[]>
    | ((optionsParams: OptionsParams) => ElOption[] | Promise<ElOption[]>);
  /**
   * 字典指定 label && value && children 的 key 值
   *
   * @default '{ label: "label", value: "value", children: "children", disabled: "disabled" }'
   */
  optionField?: ElOptionField;
  /**
   * ElFormItem props
   */
  formItemProps?: MaybeRefOrGetter<ElFormItemProps>;
  /**
   * 是否显示清除按钮
   *
   * @default true
   */
  clearable?: boolean;
  /**
   * Label 右侧 ElToolTip 提示
   */
  tooltip?:
    | MaybeRefOrGetter<string>
    | ({
        icon?: Component; // ElTooTip 绑定的元素图标
        render?: () => RenderTypes; // 自定义 ElTooTip 绑定的元素,将会覆盖图标,传入 ElTooTip 的 default 插槽里
        contentRender?: () => RenderTypes; // 自定义 ElTooTip 的内容,传入 ElTooTip 的 content 插槽里
      } & Partial<ElTooltipProps>);
  /**
   * 表单绑定的值格式,场景:select 下拉 value 为 "1",而 value 值是 1 导致无法匹配,可以设置为 valueFormat: "string" 解决
   */
  valueFormat?: "string" | "number" | "boolean" | ((value: unknown) => unknown);
  /**
   * 自定义 label 标题
   */
  renderLabel?: (label: string, scope: FormItemColumnProps) => RenderTypes;
  /**
   * 自定义 Label 内容渲染(返回 HTML),优先级低于 render,高于插槽
   */
  renderLabelHTML?: (label: string, scope: FormItemColumnProps) => string;
  /**
   * 自定义渲染 el-form-item 下的表单组件
   */
  render?: (value: unknown, update: (value: unknown) => void, scope: FormItemColumnProps) => RenderTypes;
  /**
   * 是否为编辑态
   *
   * @default true
   */
  editable?: MaybeRefOrGetter<boolean>;
}