diff --git a/packages/form-core/src/types.ts b/packages/form-core/src/types.ts index 62513afc2..e02a4e2af 100644 --- a/packages/form-core/src/types.ts +++ b/packages/form-core/src/types.ts @@ -452,17 +452,17 @@ export type UnwrapFieldValidateOrFn< : undefined : undefined : never) - | ([TValidateOrFn] extends [FieldValidateFn] - ? ReturnType - : [TValidateOrFn] extends [StandardSchemaV1] - ? // TODO: Check if `disableErrorFlat` is enabled, if so, return StandardSchemaV1Issue[][] - StandardSchemaV1Issue[] + | ([TValidateOrFn] extends [StandardSchemaV1] + ? // TODO: Check if `disableErrorFlat` is enabled, if so, return StandardSchemaV1Issue[][] + StandardSchemaV1Issue[] + : [TValidateOrFn] extends [FieldValidateFn] + ? ReturnType : undefined) - | ([TValidateOrFn] extends [FormGroupValidateFn] - ? ReturnType - : [TValidateOrFn] extends [StandardSchemaV1] - ? // TODO: Check if `disableErrorFlat` is enabled, if so, return StandardSchemaV1Issue[][] - StandardSchemaV1Issue[] + | ([TValidateOrFn] extends [StandardSchemaV1] + ? // TODO: Check if `disableErrorFlat` is enabled, if so, return StandardSchemaV1Issue[][] + StandardSchemaV1Issue[] + : [TValidateOrFn] extends [FormGroupValidateFn] + ? ReturnType : undefined) /** diff --git a/packages/form-core/tests/standardSchemaValidator.test-d.ts b/packages/form-core/tests/standardSchemaValidator.test-d.ts index 2543ec48a..9b32cc105 100644 --- a/packages/form-core/tests/standardSchemaValidator.test-d.ts +++ b/packages/form-core/tests/standardSchemaValidator.test-d.ts @@ -1,5 +1,6 @@ import { describe, expectTypeOf, it } from 'vitest' import { z } from 'zod' +import { type } from 'arktype' import { FieldApi, FormApi, standardSchemaValidators } from '../src/index' import type { StandardSchemaV1Issue } from '../src/index' @@ -80,6 +81,27 @@ describe('standard schema validator', () => { >() }) + it('Should infer StandardSchemaV1Issue[] for arktype field validators (issue #2221)', () => { + const schema = type({ firstName: 'string>0' }) + const form = new FormApi({ + defaultValues: { + firstName: '', + }, + }) + + const field = new FieldApi({ + form, + name: 'firstName', + validators: { + onChange: type('string>0'), + }, + }) + + expectTypeOf(field.getMeta().errorMap.onChange).toEqualTypeOf< + undefined | StandardSchemaV1Issue[] + >() + }) + it('Should return different Standard Schema Issue types from validateAsync based on scope', () => { const formSourceError = standardSchemaValidators.validateAsync( { value: '', validationSource: 'form' },