From f694830dc2d371ee27fdcb62a4bc860167b9ec1c Mon Sep 17 00:00:00 2001 From: Vladislav Lipatov Date: Sat, 16 Sep 2023 12:38:07 +0700 Subject: [PATCH] fix types of `defer` for `on` --- packages/solid/src/reactive/signal.ts | 2 +- packages/solid/test/signals.type-tests.ts | 19 +++++++++++++++++++ 2 files changed, 20 insertions(+), 1 deletion(-) diff --git a/packages/solid/src/reactive/signal.ts b/packages/solid/src/reactive/signal.ts index 1cd7a2d81..515955649 100644 --- a/packages/solid/src/reactive/signal.ts +++ b/packages/solid/src/reactive/signal.ts @@ -917,7 +917,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 6fd02bc7f..8aed0a9e1 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 ////////////////////////////////////////////////////////