vee-validate icon indicating copy to clipboard operation
vee-validate copied to clipboard

Infer model type from schema when using defineField()

Open bechtold opened this issue 1 year ago • 4 comments

Is your feature request related to a problem? Please describe.

I'm using typescript, yup, toTypedSchema(), and it works like a charm after getting used to values from useForm() still having | undefined types, but values from onSubmit() having the required type.

The problem: the model that is returned from defineField() has type Ref<unknown>. Screenshot 2024-07-08 at 13 02 57

This is annoying when assigning it to components typed model: Screenshot 2024-07-08 at 13 03 12

Casting the type when passing it to the component works, but is not nice I guess. Especially if you use the model multiple times, you don't want to cast it every time. Also, my understanding is, that casting would not bring the benefits that I'm looking for from typescript. Screenshot 2024-07-08 at 13 13 25

The same goes for using the ref in code: Screenshot 2024-07-08 at 13 18 44

Similar when defining, for example, a boolean and using it in a v-if. It would be possible to use values.variableName, but why not use the model?

Especially because the type is defined in the schema: Screenshot 2024-07-08 at 13 05 10

After fiddling around a bit, I found out that adding the field's path to the generic type of defineField() does help to infer the proper type. Screenshot 2024-07-08 at 13 03 39

Also in code the ref's type is inferred correctly: Screenshot 2024-07-08 at 13 23 28

Describe the solution you'd like

It would be nice if the model's type is inferred automatically instead of manually having to do it. Maybe I'm missing something, so I'm grateful for any hints.

Describe alternatives you've considered

Passing the field's path to infer the type from helps, but is redundant: defineField<"pathToField">("pathToField")

bechtold avatar Jul 08 '24 11:07 bechtold