@tanstack/form-core 0.3.5 → 0.3.6

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -19,7 +19,7 @@ type FormOptions<TData> = {
19
19
  onSubmitInvalid?: (values: TData, formApi: FormApi<TData>) => void;
20
20
  };
21
21
  type FieldInfo<TFormData> = {
22
- instances: Record<string, FieldApi<any, TFormData, any>>;
22
+ instances: Record<string, FieldApi<TFormData, any, any>>;
23
23
  } & ValidationMeta;
24
24
  type ValidationMeta = {
25
25
  validationCount?: number;
@@ -82,9 +82,9 @@ declare class FormApi<TFormData> {
82
82
  }
83
83
 
84
84
  type ValidationCause = 'change' | 'blur' | 'submit' | 'mount';
85
- type ValidateFn<TData, TParentData, TName extends DeepKeys<TParentData>> = (value: TData, fieldApi: FieldApi<TData, TParentData, TName>) => ValidationError;
86
- type ValidateAsyncFn<TData, TParentData, TName extends DeepKeys<TParentData>> = (value: TData, fieldApi: FieldApi<TData, TParentData, TName>) => ValidationError | Promise<ValidationError>;
87
- interface FieldOptions<TData, TParentData,
85
+ type ValidateFn<TParentData, TName extends DeepKeys<TParentData>, TData> = (value: TData, fieldApi: FieldApi<TParentData, TName>) => ValidationError;
86
+ type ValidateAsyncFn<TParentData, TName extends DeepKeys<TParentData>, TData> = (value: TData, fieldApi: FieldApi<TParentData, TName>) => ValidationError | Promise<ValidationError>;
87
+ interface FieldOptions<TParentData,
88
88
  /**
89
89
  * This allows us to restrict the name to only be a valid field name while
90
90
  * also assigning it to a generic
@@ -93,32 +93,23 @@ TName extends DeepKeys<TParentData>,
93
93
  /**
94
94
  * If TData is unknown, we can use the TName generic to determine the type
95
95
  */
96
- TResolvedData = unknown extends TData ? DeepValue<TParentData, TName> : TData> {
96
+ TData = DeepValue<TParentData, TName>> {
97
97
  name: DeepKeys<TParentData>;
98
- index?: TResolvedData extends any[] ? number : never;
99
- defaultValue?: TResolvedData;
98
+ index?: TData extends any[] ? number : never;
99
+ defaultValue?: TData;
100
100
  asyncDebounceMs?: number;
101
101
  asyncAlways?: boolean;
102
- onMount?: (formApi: FieldApi<TResolvedData, TParentData, TName>) => void;
103
- onChange?: ValidateFn<TResolvedData, TParentData, TName>;
104
- onChangeAsync?: ValidateAsyncFn<TResolvedData, TParentData, TName>;
102
+ onMount?: (formApi: FieldApi<TParentData, TName>) => void;
103
+ onChange?: ValidateFn<TParentData, TName, TData>;
104
+ onChangeAsync?: ValidateAsyncFn<TParentData, TName, TData>;
105
105
  onChangeAsyncDebounceMs?: number;
106
- onBlur?: ValidateFn<TResolvedData, TParentData, TName>;
107
- onBlurAsync?: ValidateAsyncFn<TResolvedData, TParentData, TName>;
106
+ onBlur?: ValidateFn<TParentData, TName, TData>;
107
+ onBlurAsync?: ValidateAsyncFn<TParentData, TName, TData>;
108
108
  onBlurAsyncDebounceMs?: number;
109
- onSubmitAsync?: ValidateAsyncFn<TResolvedData, TParentData, TName>;
109
+ onSubmitAsync?: ValidateAsyncFn<TParentData, TName, TData>;
110
110
  defaultMeta?: Partial<FieldMeta>;
111
111
  }
112
- interface FieldApiOptions<TData, TParentData,
113
- /**
114
- * This allows us to restrict the name to only be a valid field name while
115
- * also assigning it to a generic
116
- */
117
- TName extends DeepKeys<TParentData>,
118
- /**
119
- * If TData is unknown, we can use the TName generic to determine the type
120
- */
121
- TResolvedData extends ResolveData<TData, TParentData, TName> = ResolveData<TData, TParentData, TName>> extends FieldOptions<TData, TParentData, TName, TResolvedData> {
112
+ interface FieldApiOptions<TParentData, TName extends DeepKeys<TParentData>, TData = DeepValue<TParentData, TName>> extends FieldOptions<TParentData, TName, TData> {
122
113
  form: FormApi<TParentData>;
123
114
  }
124
115
  type FieldMeta = {
@@ -132,24 +123,23 @@ type FieldState<TData> = {
132
123
  value: TData;
133
124
  meta: FieldMeta;
134
125
  };
135
- type ResolveData<TData, TParentData, TName> = unknown extends TData ? DeepValue<TParentData, TName> : TData;
136
126
  type ResolveName<TParentData> = unknown extends TParentData ? string : DeepKeys<TParentData>;
137
- declare class FieldApi<TData, TParentData, TName extends DeepKeys<TParentData>, TResolvedData extends ResolveData<TData, TParentData, TName> = ResolveData<TData, TParentData, TName>> {
127
+ declare class FieldApi<TParentData, TName extends DeepKeys<TParentData>, TData = DeepValue<TParentData, TName>> {
138
128
  #private;
139
129
  uid: number;
140
- form: FieldApiOptions<TData, TParentData, TName, TResolvedData>['form'];
130
+ form: FieldApiOptions<TParentData, TName, TData>['form'];
141
131
  name: DeepKeys<TParentData>;
142
- options: FieldApiOptions<TData, TParentData, TName>;
143
- store: Store<FieldState<TResolvedData>>;
144
- state: FieldState<TResolvedData>;
145
- prevState: FieldState<TResolvedData>;
146
- constructor(opts: FieldApiOptions<TData, TParentData, TName, TResolvedData> & {
132
+ options: FieldApiOptions<TParentData, TName>;
133
+ store: Store<FieldState<TData>>;
134
+ state: FieldState<TData>;
135
+ prevState: FieldState<TData>;
136
+ constructor(opts: FieldApiOptions<TParentData, TName, TData> & {
147
137
  form: FormApi<TParentData>;
148
138
  });
149
139
  mount: () => () => void;
150
- update: (opts: FieldApiOptions<TResolvedData, TParentData, TName>) => void;
151
- getValue: () => TResolvedData;
152
- setValue: (updater: Updater<TResolvedData>, options?: {
140
+ update: (opts: FieldApiOptions<TParentData, TName, TData>) => void;
141
+ getValue: () => TData;
142
+ setValue: (updater: Updater<TData>, options?: {
153
143
  touch?: boolean;
154
144
  notify?: boolean;
155
145
  }) => void;
@@ -157,17 +147,17 @@ declare class FieldApi<TData, TParentData, TName extends DeepKeys<TParentData>,
157
147
  getMeta: () => FieldMeta;
158
148
  setMeta: (updater: Updater<FieldMeta>) => void;
159
149
  getInfo: () => FieldInfo<TParentData>;
160
- pushValue: (value: TResolvedData extends any[] ? TResolvedData[number] : never) => void;
161
- insertValue: (index: number, value: TResolvedData extends any[] ? TResolvedData[number] : never) => void;
150
+ pushValue: (value: TData extends any[] ? TData[number] : never) => void;
151
+ insertValue: (index: number, value: TData extends any[] ? TData[number] : never) => void;
162
152
  removeValue: (index: number) => void;
163
153
  swapValues: (aIndex: number, bIndex: number) => void;
164
- getSubField: <TSubData, TSubName extends DeepKeys<TResolvedData>, TSubResolvedData extends ResolveData<DeepValue<TResolvedData, TSubName>, TResolvedData, TSubName>>(name: TSubName) => FieldApi<TSubData, TResolvedData, TSubName, TSubResolvedData>;
165
- validateSync: (value: TResolvedData | undefined, cause: ValidationCause) => void;
154
+ getSubField: <TSubName extends DeepKeys<TData>, TSubData = DeepValue<TData, TSubName>>(name: TSubName) => FieldApi<TData, TSubName, TSubData>;
155
+ validateSync: (value: TData | undefined, cause: ValidationCause) => void;
166
156
  cancelValidateAsync: () => void;
167
- validateAsync: (value: TResolvedData | undefined, cause: ValidationCause) => Promise<ValidationError[]>;
168
- validate: (cause: ValidationCause, value?: TResolvedData) => ValidationError[] | Promise<ValidationError[]>;
169
- handleChange: (updater: Updater<TResolvedData>) => void;
157
+ validateAsync: (value: TData | undefined, cause: ValidationCause) => Promise<ValidationError[]>;
158
+ validate: (cause: ValidationCause, value?: TData) => ValidationError[] | Promise<ValidationError[]>;
159
+ handleChange: (updater: Updater<TData>) => void;
170
160
  handleBlur: () => void;
171
161
  }
172
162
 
173
- export { DeepKeys, DeepValue, FieldApi, FieldApiOptions, FieldInfo, FieldMeta, FieldOptions, FieldState, FormApi, FormOptions, FormState, ResolveData, ResolveName, Updater, ValidationCause, ValidationError, ValidationErrorMap, ValidationErrorMapKeys, ValidationMeta };
163
+ export { DeepKeys, DeepValue, FieldApi, FieldApiOptions, FieldInfo, FieldMeta, FieldOptions, FieldState, FormApi, FormOptions, FormState, ResolveName, Updater, ValidationCause, ValidationError, ValidationErrorMap, ValidationErrorMapKeys, ValidationMeta };
@@ -19,7 +19,7 @@ type FormOptions<TData> = {
19
19
  onSubmitInvalid?: (values: TData, formApi: FormApi<TData>) => void;
20
20
  };
21
21
  type FieldInfo<TFormData> = {
22
- instances: Record<string, FieldApi<any, TFormData, any>>;
22
+ instances: Record<string, FieldApi<TFormData, any, any>>;
23
23
  } & ValidationMeta;
24
24
  type ValidationMeta = {
25
25
  validationCount?: number;
@@ -82,9 +82,9 @@ declare class FormApi<TFormData> {
82
82
  }
83
83
 
84
84
  type ValidationCause = 'change' | 'blur' | 'submit' | 'mount';
85
- type ValidateFn<TData, TParentData, TName extends DeepKeys<TParentData>> = (value: TData, fieldApi: FieldApi<TData, TParentData, TName>) => ValidationError;
86
- type ValidateAsyncFn<TData, TParentData, TName extends DeepKeys<TParentData>> = (value: TData, fieldApi: FieldApi<TData, TParentData, TName>) => ValidationError | Promise<ValidationError>;
87
- interface FieldOptions<TData, TParentData,
85
+ type ValidateFn<TParentData, TName extends DeepKeys<TParentData>, TData> = (value: TData, fieldApi: FieldApi<TParentData, TName>) => ValidationError;
86
+ type ValidateAsyncFn<TParentData, TName extends DeepKeys<TParentData>, TData> = (value: TData, fieldApi: FieldApi<TParentData, TName>) => ValidationError | Promise<ValidationError>;
87
+ interface FieldOptions<TParentData,
88
88
  /**
89
89
  * This allows us to restrict the name to only be a valid field name while
90
90
  * also assigning it to a generic
@@ -93,32 +93,23 @@ TName extends DeepKeys<TParentData>,
93
93
  /**
94
94
  * If TData is unknown, we can use the TName generic to determine the type
95
95
  */
96
- TResolvedData = unknown extends TData ? DeepValue<TParentData, TName> : TData> {
96
+ TData = DeepValue<TParentData, TName>> {
97
97
  name: DeepKeys<TParentData>;
98
- index?: TResolvedData extends any[] ? number : never;
99
- defaultValue?: TResolvedData;
98
+ index?: TData extends any[] ? number : never;
99
+ defaultValue?: TData;
100
100
  asyncDebounceMs?: number;
101
101
  asyncAlways?: boolean;
102
- onMount?: (formApi: FieldApi<TResolvedData, TParentData, TName>) => void;
103
- onChange?: ValidateFn<TResolvedData, TParentData, TName>;
104
- onChangeAsync?: ValidateAsyncFn<TResolvedData, TParentData, TName>;
102
+ onMount?: (formApi: FieldApi<TParentData, TName>) => void;
103
+ onChange?: ValidateFn<TParentData, TName, TData>;
104
+ onChangeAsync?: ValidateAsyncFn<TParentData, TName, TData>;
105
105
  onChangeAsyncDebounceMs?: number;
106
- onBlur?: ValidateFn<TResolvedData, TParentData, TName>;
107
- onBlurAsync?: ValidateAsyncFn<TResolvedData, TParentData, TName>;
106
+ onBlur?: ValidateFn<TParentData, TName, TData>;
107
+ onBlurAsync?: ValidateAsyncFn<TParentData, TName, TData>;
108
108
  onBlurAsyncDebounceMs?: number;
109
- onSubmitAsync?: ValidateAsyncFn<TResolvedData, TParentData, TName>;
109
+ onSubmitAsync?: ValidateAsyncFn<TParentData, TName, TData>;
110
110
  defaultMeta?: Partial<FieldMeta>;
111
111
  }
112
- interface FieldApiOptions<TData, TParentData,
113
- /**
114
- * This allows us to restrict the name to only be a valid field name while
115
- * also assigning it to a generic
116
- */
117
- TName extends DeepKeys<TParentData>,
118
- /**
119
- * If TData is unknown, we can use the TName generic to determine the type
120
- */
121
- TResolvedData extends ResolveData<TData, TParentData, TName> = ResolveData<TData, TParentData, TName>> extends FieldOptions<TData, TParentData, TName, TResolvedData> {
112
+ interface FieldApiOptions<TParentData, TName extends DeepKeys<TParentData>, TData = DeepValue<TParentData, TName>> extends FieldOptions<TParentData, TName, TData> {
122
113
  form: FormApi<TParentData>;
123
114
  }
124
115
  type FieldMeta = {
@@ -132,24 +123,23 @@ type FieldState<TData> = {
132
123
  value: TData;
133
124
  meta: FieldMeta;
134
125
  };
135
- type ResolveData<TData, TParentData, TName> = unknown extends TData ? DeepValue<TParentData, TName> : TData;
136
126
  type ResolveName<TParentData> = unknown extends TParentData ? string : DeepKeys<TParentData>;
137
- declare class FieldApi<TData, TParentData, TName extends DeepKeys<TParentData>, TResolvedData extends ResolveData<TData, TParentData, TName> = ResolveData<TData, TParentData, TName>> {
127
+ declare class FieldApi<TParentData, TName extends DeepKeys<TParentData>, TData = DeepValue<TParentData, TName>> {
138
128
  #private;
139
129
  uid: number;
140
- form: FieldApiOptions<TData, TParentData, TName, TResolvedData>['form'];
130
+ form: FieldApiOptions<TParentData, TName, TData>['form'];
141
131
  name: DeepKeys<TParentData>;
142
- options: FieldApiOptions<TData, TParentData, TName>;
143
- store: Store<FieldState<TResolvedData>>;
144
- state: FieldState<TResolvedData>;
145
- prevState: FieldState<TResolvedData>;
146
- constructor(opts: FieldApiOptions<TData, TParentData, TName, TResolvedData> & {
132
+ options: FieldApiOptions<TParentData, TName>;
133
+ store: Store<FieldState<TData>>;
134
+ state: FieldState<TData>;
135
+ prevState: FieldState<TData>;
136
+ constructor(opts: FieldApiOptions<TParentData, TName, TData> & {
147
137
  form: FormApi<TParentData>;
148
138
  });
149
139
  mount: () => () => void;
150
- update: (opts: FieldApiOptions<TResolvedData, TParentData, TName>) => void;
151
- getValue: () => TResolvedData;
152
- setValue: (updater: Updater<TResolvedData>, options?: {
140
+ update: (opts: FieldApiOptions<TParentData, TName, TData>) => void;
141
+ getValue: () => TData;
142
+ setValue: (updater: Updater<TData>, options?: {
153
143
  touch?: boolean;
154
144
  notify?: boolean;
155
145
  }) => void;
@@ -157,17 +147,17 @@ declare class FieldApi<TData, TParentData, TName extends DeepKeys<TParentData>,
157
147
  getMeta: () => FieldMeta;
158
148
  setMeta: (updater: Updater<FieldMeta>) => void;
159
149
  getInfo: () => FieldInfo<TParentData>;
160
- pushValue: (value: TResolvedData extends any[] ? TResolvedData[number] : never) => void;
161
- insertValue: (index: number, value: TResolvedData extends any[] ? TResolvedData[number] : never) => void;
150
+ pushValue: (value: TData extends any[] ? TData[number] : never) => void;
151
+ insertValue: (index: number, value: TData extends any[] ? TData[number] : never) => void;
162
152
  removeValue: (index: number) => void;
163
153
  swapValues: (aIndex: number, bIndex: number) => void;
164
- getSubField: <TSubData, TSubName extends DeepKeys<TResolvedData>, TSubResolvedData extends ResolveData<DeepValue<TResolvedData, TSubName>, TResolvedData, TSubName>>(name: TSubName) => FieldApi<TSubData, TResolvedData, TSubName, TSubResolvedData>;
165
- validateSync: (value: TResolvedData | undefined, cause: ValidationCause) => void;
154
+ getSubField: <TSubName extends DeepKeys<TData>, TSubData = DeepValue<TData, TSubName>>(name: TSubName) => FieldApi<TData, TSubName, TSubData>;
155
+ validateSync: (value: TData | undefined, cause: ValidationCause) => void;
166
156
  cancelValidateAsync: () => void;
167
- validateAsync: (value: TResolvedData | undefined, cause: ValidationCause) => Promise<ValidationError[]>;
168
- validate: (cause: ValidationCause, value?: TResolvedData) => ValidationError[] | Promise<ValidationError[]>;
169
- handleChange: (updater: Updater<TResolvedData>) => void;
157
+ validateAsync: (value: TData | undefined, cause: ValidationCause) => Promise<ValidationError[]>;
158
+ validate: (cause: ValidationCause, value?: TData) => ValidationError[] | Promise<ValidationError[]>;
159
+ handleChange: (updater: Updater<TData>) => void;
170
160
  handleBlur: () => void;
171
161
  }
172
162
 
173
- export { DeepKeys, DeepValue, FieldApi, FieldApiOptions, FieldInfo, FieldMeta, FieldOptions, FieldState, FormApi, FormOptions, FormState, ResolveData, ResolveName, Updater, ValidationCause, ValidationError, ValidationErrorMap, ValidationErrorMapKeys, ValidationMeta };
163
+ export { DeepKeys, DeepValue, FieldApi, FieldApiOptions, FieldInfo, FieldMeta, FieldOptions, FieldState, FormApi, FormOptions, FormState, ResolveName, Updater, ValidationCause, ValidationError, ValidationErrorMap, ValidationErrorMapKeys, ValidationMeta };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@tanstack/form-core",
3
- "version": "0.3.5",
3
+ "version": "0.3.6",
4
4
  "description": "Powerful, type-safe, framework agnostic forms.",
5
5
  "author": "tannerlinsley",
6
6
  "license": "MIT",
package/src/FieldApi.ts CHANGED
@@ -4,22 +4,21 @@ import { Store } from '@tanstack/store'
4
4
 
5
5
  export type ValidationCause = 'change' | 'blur' | 'submit' | 'mount'
6
6
 
7
- type ValidateFn<TData, TParentData, TName extends DeepKeys<TParentData>> = (
7
+ type ValidateFn<TParentData, TName extends DeepKeys<TParentData>, TData> = (
8
8
  value: TData,
9
- fieldApi: FieldApi<TData, TParentData, TName>,
9
+ fieldApi: FieldApi<TParentData, TName>,
10
10
  ) => ValidationError
11
11
 
12
12
  type ValidateAsyncFn<
13
- TData,
14
13
  TParentData,
15
14
  TName extends DeepKeys<TParentData>,
15
+ TData,
16
16
  > = (
17
17
  value: TData,
18
- fieldApi: FieldApi<TData, TParentData, TName>,
18
+ fieldApi: FieldApi<TParentData, TName>,
19
19
  ) => ValidationError | Promise<ValidationError>
20
20
 
21
21
  export interface FieldOptions<
22
- TData,
23
22
  TParentData,
24
23
  /**
25
24
  * This allows us to restrict the name to only be a valid field name while
@@ -29,41 +28,29 @@ export interface FieldOptions<
29
28
  /**
30
29
  * If TData is unknown, we can use the TName generic to determine the type
31
30
  */
32
- TResolvedData = unknown extends TData ? DeepValue<TParentData, TName> : TData,
31
+ TData = DeepValue<TParentData, TName>,
33
32
  > {
34
33
  name: DeepKeys<TParentData>
35
- index?: TResolvedData extends any[] ? number : never
36
- defaultValue?: TResolvedData
34
+ index?: TData extends any[] ? number : never
35
+ defaultValue?: TData
37
36
  asyncDebounceMs?: number
38
37
  asyncAlways?: boolean
39
- onMount?: (formApi: FieldApi<TResolvedData, TParentData, TName>) => void
40
- onChange?: ValidateFn<TResolvedData, TParentData, TName>
41
- onChangeAsync?: ValidateAsyncFn<TResolvedData, TParentData, TName>
38
+ onMount?: (formApi: FieldApi<TParentData, TName>) => void
39
+ onChange?: ValidateFn<TParentData, TName, TData>
40
+ onChangeAsync?: ValidateAsyncFn<TParentData, TName, TData>
42
41
  onChangeAsyncDebounceMs?: number
43
- onBlur?: ValidateFn<TResolvedData, TParentData, TName>
44
- onBlurAsync?: ValidateAsyncFn<TResolvedData, TParentData, TName>
42
+ onBlur?: ValidateFn<TParentData, TName, TData>
43
+ onBlurAsync?: ValidateAsyncFn<TParentData, TName, TData>
45
44
  onBlurAsyncDebounceMs?: number
46
- onSubmitAsync?: ValidateAsyncFn<TResolvedData, TParentData, TName>
45
+ onSubmitAsync?: ValidateAsyncFn<TParentData, TName, TData>
47
46
  defaultMeta?: Partial<FieldMeta>
48
47
  }
49
48
 
50
49
  export interface FieldApiOptions<
51
- TData,
52
50
  TParentData,
53
- /**
54
- * This allows us to restrict the name to only be a valid field name while
55
- * also assigning it to a generic
56
- */
57
51
  TName extends DeepKeys<TParentData>,
58
- /**
59
- * If TData is unknown, we can use the TName generic to determine the type
60
- */
61
- TResolvedData extends ResolveData<TData, TParentData, TName> = ResolveData<
62
- TData,
63
- TParentData,
64
- TName
65
- >,
66
- > extends FieldOptions<TData, TParentData, TName, TResolvedData> {
52
+ TData = DeepValue<TParentData, TName>,
53
+ > extends FieldOptions<TParentData, TName, TData> {
67
54
  form: FormApi<TParentData>
68
55
  }
69
56
 
@@ -82,34 +69,25 @@ export type FieldState<TData> = {
82
69
  meta: FieldMeta
83
70
  }
84
71
 
85
- export type ResolveData<TData, TParentData, TName> = unknown extends TData
86
- ? DeepValue<TParentData, TName>
87
- : TData
88
-
89
72
  export type ResolveName<TParentData> = unknown extends TParentData
90
73
  ? string
91
74
  : DeepKeys<TParentData>
92
75
 
93
76
  export class FieldApi<
94
- TData,
95
77
  TParentData,
96
78
  TName extends DeepKeys<TParentData>,
97
- TResolvedData extends ResolveData<TData, TParentData, TName> = ResolveData<
98
- TData,
99
- TParentData,
100
- TName
101
- >,
79
+ TData = DeepValue<TParentData, TName>,
102
80
  > {
103
81
  uid: number
104
- form: FieldApiOptions<TData, TParentData, TName, TResolvedData>['form']
82
+ form: FieldApiOptions<TParentData, TName, TData>['form']
105
83
  name!: DeepKeys<TParentData>
106
- options: FieldApiOptions<TData, TParentData, TName> = {} as any
107
- store!: Store<FieldState<TResolvedData>>
108
- state!: FieldState<TResolvedData>
109
- prevState!: FieldState<TResolvedData>
84
+ options: FieldApiOptions<TParentData, TName> = {} as any
85
+ store!: Store<FieldState<TData>>
86
+ state!: FieldState<TData>
87
+ prevState!: FieldState<TData>
110
88
 
111
89
  constructor(
112
- opts: FieldApiOptions<TData, TParentData, TName, TResolvedData> & {
90
+ opts: FieldApiOptions<TParentData, TName, TData> & {
113
91
  form: FormApi<TParentData>
114
92
  },
115
93
  ) {
@@ -123,7 +101,7 @@ export class FieldApi<
123
101
 
124
102
  this.name = opts.name as any
125
103
 
126
- this.store = new Store<FieldState<TResolvedData>>(
104
+ this.store = new Store<FieldState<TData>>(
127
105
  {
128
106
  value: this.getValue(),
129
107
  // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition
@@ -190,7 +168,7 @@ export class FieldApi<
190
168
  }
191
169
  }
192
170
 
193
- update = (opts: FieldApiOptions<TResolvedData, TParentData, TName>) => {
171
+ update = (opts: FieldApiOptions<TParentData, TName, TData>) => {
194
172
  // Default Value
195
173
  // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition
196
174
  if (this.state.value === undefined) {
@@ -212,12 +190,12 @@ export class FieldApi<
212
190
  this.options = opts as never
213
191
  }
214
192
 
215
- getValue = (): TResolvedData => {
193
+ getValue = (): TData => {
216
194
  return this.form.getFieldValue(this.name) as any
217
195
  }
218
196
 
219
197
  setValue = (
220
- updater: Updater<TResolvedData>,
198
+ updater: Updater<TData>,
221
199
  options?: { touch?: boolean; notify?: boolean },
222
200
  ) => {
223
201
  this.form.setFieldValue(this.name, updater as never, options)
@@ -241,13 +219,12 @@ export class FieldApi<
241
219
 
242
220
  getInfo = () => this.form.getFieldInfo(this.name)
243
221
 
244
- pushValue = (
245
- value: TResolvedData extends any[] ? TResolvedData[number] : never,
246
- ) => this.form.pushFieldValue(this.name, value as any)
222
+ pushValue = (value: TData extends any[] ? TData[number] : never) =>
223
+ this.form.pushFieldValue(this.name, value as any)
247
224
 
248
225
  insertValue = (
249
226
  index: number,
250
- value: TResolvedData extends any[] ? TResolvedData[number] : never,
227
+ value: TData extends any[] ? TData[number] : never,
251
228
  ) => this.form.insertFieldValue(this.name, index, value as any)
252
229
 
253
230
  removeValue = (index: number) => this.form.removeFieldValue(this.name, index)
@@ -256,16 +233,11 @@ export class FieldApi<
256
233
  this.form.swapFieldValues(this.name, aIndex, bIndex)
257
234
 
258
235
  getSubField = <
259
- TSubData,
260
- TSubName extends DeepKeys<TResolvedData>,
261
- TSubResolvedData extends ResolveData<
262
- DeepValue<TResolvedData, TSubName>,
263
- TResolvedData,
264
- TSubName
265
- >,
236
+ TSubName extends DeepKeys<TData>,
237
+ TSubData = DeepValue<TData, TSubName>,
266
238
  >(
267
239
  name: TSubName,
268
- ): FieldApi<TSubData, TResolvedData, TSubName, TSubResolvedData> =>
240
+ ): FieldApi<TData, TSubName, TSubData> =>
269
241
  new FieldApi({
270
242
  name: `${this.name}.${name}` as never,
271
243
  form: this.form,
@@ -398,7 +370,7 @@ export class FieldApi<
398
370
 
399
371
  validate = (
400
372
  cause: ValidationCause,
401
- value?: TResolvedData,
373
+ value?: TData,
402
374
  ): ValidationError[] | Promise<ValidationError[]> => {
403
375
  // If the field is pristine and validatePristine is false, do not validate
404
376
  if (!this.state.meta.isTouched) return []
@@ -416,7 +388,7 @@ export class FieldApi<
416
388
  return this.validateAsync(value, cause)
417
389
  }
418
390
 
419
- handleChange = (updater: Updater<TResolvedData>) => {
391
+ handleChange = (updater: Updater<TData>) => {
420
392
  this.setValue(updater, { touch: true })
421
393
  }
422
394
 
package/src/FormApi.ts CHANGED
@@ -31,7 +31,7 @@ export type FormOptions<TData> = {
31
31
  }
32
32
 
33
33
  export type FieldInfo<TFormData> = {
34
- instances: Record<string, FieldApi<any, TFormData, any>>
34
+ instances: Record<string, FieldApi<TFormData, any, any>>
35
35
  } & ValidationMeta
36
36
 
37
37
  export type ValidationMeta = {