Skip to content

Commit b998045

Browse files
authored
fix: maintain the form types when transforming with useTransform hook (#889)
1 parent 354f63a commit b998045

File tree

2 files changed

+32
-2
lines changed

2 files changed

+32
-2
lines changed

packages/react-form/src/useTransform.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,12 @@
1-
import type { FormApi, Validator } from '@tanstack/form-core'
1+
import type { FormApi, FormTransform, Validator } from '@tanstack/form-core'
22

33
export function useTransform<
44
TFormData,
55
TFormValidator extends Validator<TFormData, unknown> | undefined = undefined,
66
>(
77
fn: (formBase: FormApi<any, any>) => FormApi<TFormData, TFormValidator>,
88
deps: unknown[],
9-
) {
9+
): FormTransform<TFormData, TFormValidator> {
1010
return {
1111
fn,
1212
deps,
Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,30 @@
1+
import { assertType, it } from 'vitest'
2+
import { formOptions, mergeForm, useForm, useTransform } from '../src'
3+
import { type ServerFormState } from '../src/nextjs/types'
4+
5+
it('should maintain the type of the form', () => {
6+
const state = {} as ServerFormState<any>
7+
8+
const formOpts = formOptions({
9+
defaultValues: {
10+
firstName: '',
11+
age: 123,
12+
} as const,
13+
})
14+
15+
function Comp() {
16+
const form = useForm({
17+
...formOpts,
18+
transform: useTransform(
19+
(baseForm) => mergeForm(baseForm, state),
20+
[state],
21+
),
22+
})
23+
24+
assertType<123>(form.state.values.age)
25+
assertType<string>(form.state.values.firstName)
26+
27+
// @ts-expect-error this should be a number
28+
form.state.values.age = 'age'
29+
}
30+
})

0 commit comments

Comments
 (0)