diff --git a/src/index.ts b/src/index.ts index 3e8f11b..532bdda 100644 --- a/src/index.ts +++ b/src/index.ts @@ -16,15 +16,7 @@ import type { Values, } from './interface'; import { messages as defaultMessages, newMessages } from './messages'; -import { - asyncMap, - complementError, - convertFieldsError, - deepMerge, - format, - isEmptyValue, - warning, -} from './util'; +import { asyncMap, complementError, convertFieldsError, deepMerge, format, warning } from './util'; import validators from './validator/index'; export * from './interface'; @@ -154,9 +146,8 @@ class Schema { source = { ...source }; } value = source[z] = rule.transform(value); - const type = rule.type || ((Array.isArray(value) ? 'array' : typeof value) as RuleType); - if (!isEmptyValue(value, type)) { - rule.type = type; + if (value !== undefined && value !== null) { + rule.type = rule.type || ((Array.isArray(value) ? 'array' : typeof value) as RuleType); } } if (typeof rule === 'function') { diff --git a/tests/number.spec.ts b/tests/number.spec.ts index db1c3cb..fbb54e4 100644 --- a/tests/number.spec.ts +++ b/tests/number.spec.ts @@ -167,6 +167,17 @@ describe('number', () => { v: { required: true, transform: v => undefined }, }).validate(value, errors => { expect(errors).toBeTruthy(); + expect(errors[0].message).toBe('v is required'); + done(); + }); + }); + it('empty array message is "v is required"', done => { + const value = { v: [] }; + new Schema({ + v: { required: true, transform: () => [] }, + }).validate(value, errors => { + expect(errors).toBeTruthy(); + expect(errors[0].message).toBe('v is required'); done(); }); });