diff --git a/.changeset/red-pears-rush.md b/.changeset/red-pears-rush.md new file mode 100644 index 00000000..a42fc3ea --- /dev/null +++ b/.changeset/red-pears-rush.md @@ -0,0 +1,5 @@ +--- +"solid-js": patch +--- + +Allow passing defer:boolean to `on` diff --git a/packages/solid/src/reactive/signal.ts b/packages/solid/src/reactive/signal.ts index 25439507..5da41f91 100644 --- a/packages/solid/src/reactive/signal.ts +++ b/packages/solid/src/reactive/signal.ts @@ -922,7 +922,7 @@ export function on( export function on( deps: AccessorArray | Accessor, fn: OnEffectFunction, Next>, - options: OnOptions & { defer: true } + options: OnOptions | { defer: true } ): EffectFunction>; export function on( deps: AccessorArray | Accessor, diff --git a/packages/solid/test/signals.type-tests.ts b/packages/solid/test/signals.type-tests.ts index 6fd02bc7..8aed0a9e 100644 --- a/packages/solid/test/signals.type-tests.ts +++ b/packages/solid/test/signals.type-tests.ts @@ -710,6 +710,25 @@ const onMemo3 = createMemo( ); // @ts-expect-error when deferred the type includes undefined const onMemo4: Accessor = onMemo3; +// Allow passing boolean to defer +const memoCreator = (defer: boolean) => + createMemo( + on( + [one, two], + (input, prevInput, prev) => { + const [one, two]: [number, boolean] = input; + if (prevInput) { + const [prevOne, prevTwo]: [number, boolean] = prevInput; + } + // @ts-expect-error FIXME computed type is unknown, should be `number`. + const _prev: number = prev; + return one + +two; + }, + { defer } + ) + ); +const memoCreator1: Accessor = memoCreator(true); +const memoCreator2: Accessor = memoCreator(false); ////////////////////////////////////////////////////////////////////////// // createSelector ////////////////////////////////////////////////////////