diff --git a/.changeset/lucky-humans-make.md b/.changeset/lucky-humans-make.md new file mode 100644 index 000000000000..ed3b5bf95fc2 --- /dev/null +++ b/.changeset/lucky-humans-make.md @@ -0,0 +1,5 @@ +--- +'@sveltejs/kit': patch +--- + +fix: correctly type the `result` of `form` remote functions that do not accept data diff --git a/packages/kit/src/runtime/app/server/remote/form.js b/packages/kit/src/runtime/app/server/remote/form.js index 1fe3390b18c5..1c24412c2545 100644 --- a/packages/kit/src/runtime/app/server/remote/form.js +++ b/packages/kit/src/runtime/app/server/remote/form.js @@ -13,7 +13,7 @@ import { convert_formdata, flatten_issues } from '../../../utils.js'; * * @template Output * @overload - * @param {() => Output} fn + * @param {() => MaybePromise} fn * @returns {RemoteForm} * @since 2.27 */ diff --git a/packages/kit/test/types/remote.test.ts b/packages/kit/test/types/remote.test.ts index d665bf07981b..be5b94ee103d 100644 --- a/packages/kit/test/types/remote.test.ts +++ b/packages/kit/test/types/remote.test.ts @@ -301,6 +301,11 @@ function form_tests() { f6.input!['array[0].array[]'] = ['']; // @ts-expect-error f6.input!['array[0].prop'] = 123; + + // doesn't use data + // eslint-disable-next-line @typescript-eslint/require-await --- we are testing that the async function does not cause `result` to be typed as a Promise + const f7 = form(async () => ({ success: true })); + f7.result?.success === true; } form_tests(); diff --git a/packages/kit/types/index.d.ts b/packages/kit/types/index.d.ts index d35e05a259e1..7a5a4afc2449 100644 --- a/packages/kit/types/index.d.ts +++ b/packages/kit/types/index.d.ts @@ -3061,7 +3061,7 @@ declare module '$app/server' { * * @since 2.27 */ - export function form(fn: () => Output): RemoteForm; + export function form(fn: () => MaybePromise): RemoteForm; /** * Creates a form object that can be spread onto a `
` element. *