Skip to content

Commit 91e97aa

Browse files
committed
fix: allow generics for generic function type
1 parent d8ed905 commit 91e97aa

File tree

3 files changed

+17
-12
lines changed

3 files changed

+17
-12
lines changed

packages/vee-validate/src/types.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -109,8 +109,8 @@ export interface PrivateFieldContext<TValue = unknown> {
109109

110110
export type FieldContext<TValue = unknown> = Omit<PrivateFieldContext<TValue>, 'id' | 'instances'>;
111111

112-
export type GenericValidateFunction = (
113-
value: unknown,
112+
export type GenericValidateFunction<TValue = unknown> = (
113+
value: TValue,
114114
ctx: FieldValidationMetaInfo
115115
) => boolean | string | Promise<boolean | string>;
116116

packages/vee-validate/src/useField.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -61,8 +61,8 @@ export interface FieldOptions<TValue = unknown> {
6161
export type RuleExpression<TValue> =
6262
| string
6363
| Record<string, unknown>
64-
| GenericValidateFunction
65-
| GenericValidateFunction[]
64+
| GenericValidateFunction<TValue>
65+
| GenericValidateFunction<TValue>[]
6666
| YupValidator<TValue>
6767
| undefined;
6868

packages/vee-validate/src/validate.ts

Lines changed: 13 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -14,9 +14,14 @@ import { isCallable, FieldValidationMetaInfo } from '../../shared';
1414
/**
1515
* Used internally
1616
*/
17-
interface FieldValidationContext {
17+
interface FieldValidationContext<TValue = unknown> {
1818
name: string;
19-
rules: GenericValidateFunction | GenericValidateFunction[] | YupValidator | string | Record<string, unknown>;
19+
rules:
20+
| GenericValidateFunction<TValue>
21+
| GenericValidateFunction<TValue>[]
22+
| YupValidator<TValue>
23+
| string
24+
| Record<string, unknown>;
2025
bails: boolean;
2126
formData: Record<string, unknown>;
2227
}
@@ -30,18 +35,18 @@ interface ValidationOptions {
3035
/**
3136
* Validates a value against the rules.
3237
*/
33-
export async function validate(
34-
value: unknown,
38+
export async function validate<TValue = unknown>(
39+
value: TValue,
3540
rules:
3641
| string
3742
| Record<string, unknown | unknown[]>
38-
| GenericValidateFunction
39-
| GenericValidateFunction[]
43+
| GenericValidateFunction<TValue>
44+
| GenericValidateFunction<TValue>[]
4045
| YupValidator,
4146
options: ValidationOptions = {}
4247
): Promise<ValidationResult> {
4348
const shouldBail = options?.bails;
44-
const field: FieldValidationContext = {
49+
const field: FieldValidationContext<TValue> = {
4550
name: options?.name || '{field}',
4651
rules,
4752
bails: shouldBail ?? true,
@@ -60,7 +65,7 @@ export async function validate(
6065
/**
6166
* Starts the validation process.
6267
*/
63-
async function _validate(field: FieldValidationContext, value: unknown) {
68+
async function _validate<TValue = unknown>(field: FieldValidationContext<TValue>, value: TValue) {
6469
if (isYupValidator(field.rules)) {
6570
return validateFieldWithYup(value, field.rules, { bails: field.bails });
6671
}

0 commit comments

Comments
 (0)