|
1 | | -import type { FormOptions } from './FormApi' |
| 1 | +import type { |
| 2 | + FormAsyncValidateOrFn, |
| 3 | + FormOptions, |
| 4 | + FormValidateOrFn, |
| 5 | +} from './FormApi' |
| 6 | + |
| 7 | +/* |
| 8 | +
|
| 9 | +These types need to do two things: |
| 10 | +
|
| 11 | +1. Validator generics need to depend on the TFormData generic |
| 12 | +2. The resulting needs to allow overriding values |
| 13 | +
|
| 14 | +The generics from formOptions almost work, except that it loses information |
| 15 | +about how to infer TFormData. |
| 16 | +If you pass a validator function, it tries to resolve the `formApi` or `value` |
| 17 | +inside of it, meaning that TFormData changes to `unknown`. |
| 18 | +
|
| 19 | +To bypass this, the intersection for defaultOpts gives TypeScript that information again, |
| 20 | +without losing the benefits from the TOptions generic. |
| 21 | +*/ |
2 | 22 |
|
3 | 23 | export function formOptions< |
4 | | - T extends Partial< |
5 | | - FormOptions<any, any, any, any, any, any, any, any, any, any, any, any> |
| 24 | + TOptions extends Partial< |
| 25 | + FormOptions< |
| 26 | + TFormData, |
| 27 | + undefined | FormValidateOrFn<TFormData>, |
| 28 | + undefined | FormValidateOrFn<TFormData>, |
| 29 | + undefined | FormAsyncValidateOrFn<TFormData>, |
| 30 | + undefined | FormValidateOrFn<TFormData>, |
| 31 | + undefined | FormAsyncValidateOrFn<TFormData>, |
| 32 | + undefined | FormValidateOrFn<TFormData>, |
| 33 | + undefined | FormAsyncValidateOrFn<TFormData>, |
| 34 | + undefined | FormValidateOrFn<TFormData>, |
| 35 | + undefined | FormAsyncValidateOrFn<TFormData>, |
| 36 | + undefined | FormAsyncValidateOrFn<TFormData>, |
| 37 | + TSubmitMeta |
| 38 | + > |
6 | 39 | >, |
7 | | ->(defaultOpts: T) { |
| 40 | + TFormData = TOptions['defaultValues'], |
| 41 | + TSubmitMeta = TOptions['onSubmitMeta'], |
| 42 | +>( |
| 43 | + defaultOpts: Partial< |
| 44 | + FormOptions< |
| 45 | + TFormData, |
| 46 | + undefined | FormValidateOrFn<TFormData>, |
| 47 | + undefined | FormValidateOrFn<TFormData>, |
| 48 | + undefined | FormAsyncValidateOrFn<TFormData>, |
| 49 | + undefined | FormValidateOrFn<TFormData>, |
| 50 | + undefined | FormAsyncValidateOrFn<TFormData>, |
| 51 | + undefined | FormValidateOrFn<TFormData>, |
| 52 | + undefined | FormAsyncValidateOrFn<TFormData>, |
| 53 | + undefined | FormValidateOrFn<TFormData>, |
| 54 | + undefined | FormAsyncValidateOrFn<TFormData>, |
| 55 | + undefined | FormAsyncValidateOrFn<TFormData>, |
| 56 | + TSubmitMeta |
| 57 | + > |
| 58 | + > & |
| 59 | + TOptions, |
| 60 | +): TOptions { |
8 | 61 | return defaultOpts |
9 | 62 | } |
0 commit comments