From c59f1f01526b160a1081f276d732523ad9ab5ba2 Mon Sep 17 00:00:00 2001 From: Abdelrahman Awad Date: Sat, 13 Feb 2021 14:23:36 +0200 Subject: [PATCH] feat: improve typing for field yup schema --- packages/vee-validate/src/useField.ts | 16 +++++++++++----- 1 file changed, 11 insertions(+), 5 deletions(-) diff --git a/packages/vee-validate/src/useField.ts b/packages/vee-validate/src/useField.ts index 124c7dc3d..2d611d9ff 100644 --- a/packages/vee-validate/src/useField.ts +++ b/packages/vee-validate/src/useField.ts @@ -34,10 +34,10 @@ import { injectWithSelf, resolveNextCheckboxValue, isYupValidator, - keysOf, } from './utils'; import { isCallable } from '../../shared'; import { FieldContextSymbol, FormInitialValuesSymbol, FormContextSymbol } from './symbols'; +import { BaseSchema } from 'yup'; interface FieldOptions { initialValue?: MaybeReactive; @@ -50,7 +50,13 @@ interface FieldOptions { label?: MaybeReactive; } -type RuleExpression = string | Record | GenericValidateFunction | YupValidator | undefined; +type RuleExpression = + | string + | Record + | GenericValidateFunction + | YupValidator + | BaseSchema + | undefined; let ID_COUNTER = 0; @@ -59,7 +65,7 @@ let ID_COUNTER = 0; */ export function useField( name: MaybeReactive, - rules?: MaybeReactive, + rules?: MaybeReactive>, opts?: Partial> ): FieldComposable { const fid = ID_COUNTER >= Number.MAX_SAFE_INTEGER ? 0 : ++ID_COUNTER; @@ -97,7 +103,7 @@ export function useField( let rulesValue = unref(rules); const schema = form?.schema; if (schema && !isYupValidator(schema)) { - rulesValue = extractRuleFromSchema(schema, unref(name)) || rulesValue; + rulesValue = extractRuleFromSchema(schema, unref(name)) || rulesValue; } if (isYupValidator(rulesValue) || isCallable(rulesValue)) { @@ -419,7 +425,7 @@ function useMeta(initialValue: TValue) { /** * Extracts the validation rules from a schema */ -function extractRuleFromSchema(schema: Record | undefined, fieldName: string) { +function extractRuleFromSchema(schema: Record> | undefined, fieldName: string) { // no schema at all if (!schema) { return undefined;