diff --git a/src/form/__tests__/form.test.tsx b/src/form/__tests__/form.test.tsx
index f516f5f0aa..5bc6481f1c 100644
--- a/src/form/__tests__/form.test.tsx
+++ b/src/form/__tests__/form.test.tsx
@@ -7,6 +7,7 @@ import Input from '../../input';
import Button from '../../button';
import Radio from '../../radio';
import { HelpCircleIcon } from 'tdesign-icons-react';
+import InputNumber from '../../input-number';
const { FormItem, FormList } = Form;
@@ -423,6 +424,62 @@ describe('Form 组件测试', () => {
expect(container.querySelector('.t-input__extra').innerHTML).toBe('please input username');
});
+ test('FormItem rules min max', async () => {
+ const TestForm = () => {
+ const initialValues = {
+ year1: -2,
+ year2: 1,
+ year3: 4,
+ year4: -4,
+ year5: -1,
+ year6: 2,
+ };
+ return (
+
+ );
+ };
+ const { container, getByText, getByPlaceholderText } = render();
+ fireEvent.click(getByText('提交'));
+ await mockDelay();
+ expect(container.querySelector('.t-input__extra')).toBeNull();
+
+ // 错误验证
+ fireEvent.change(getByPlaceholderText('year1'), { target: { value: -4 } });
+ fireEvent.change(getByPlaceholderText('year2'), { target: { value: -1 } });
+ fireEvent.change(getByPlaceholderText('year3'), { target: { value: 2 } });
+ fireEvent.change(getByPlaceholderText('year4'), { target: { value: -2 } });
+ fireEvent.change(getByPlaceholderText('year5'), { target: { value: 1 } });
+ fireEvent.change(getByPlaceholderText('year6'), { target: { value: 4 } });
+ fireEvent.click(getByText('提交'));
+ await mockDelay();
+ const input__extraList = container.querySelectorAll('.t-input__extra');
+ input__extraList.forEach((item: { innerHTML: string }, index: number) => {
+ expect(item.innerHTML).toBe(`year${index + 1} error`);
+ });
+ });
+
test('动态渲染并初始赋值', () => {
const TestForm = () => {
const [form] = Form.useForm();
diff --git a/src/form/formModel.ts b/src/form/formModel.ts
index 42fe38a684..3dc8fc65ab 100644
--- a/src/form/formModel.ts
+++ b/src/form/formModel.ts
@@ -54,7 +54,7 @@ const VALIDATE_MAP = {
validator: (val: ValueType, validate: CustomValidator): ReturnType => validate(val),
};
-export type ValidateFuncType = typeof VALIDATE_MAP[keyof typeof VALIDATE_MAP];
+export type ValidateFuncType = (typeof VALIDATE_MAP)[keyof typeof VALIDATE_MAP];
/**
* 校验某一条数据的某一条规则,一种校验规则不满足则不再进行校验。
@@ -75,7 +75,7 @@ export async function validateOneRule(value: ValueType, rule: FormRule): Promise
}
const validateRule: ValidateFuncType = VALIDATE_MAP[key];
// 找到一个校验规则,则无需再找,因为参数只允许对一个规则进行校验
- if (validateRule && rule[key]) {
+ if (validateRule && ![undefined, null].includes(rule[key])) {
// rule 值为 true 则表示没有校验参数,只是对值进行默认规则校验
vOptions = rule[key] === true ? undefined : rule[key];
vValidateFun = validateRule;