Skip to content

Commit 8b49110

Browse files
elite174ryansolid
andauthored
fix: allow passing defer:boolean to on (#1885)
* fix types of `defer` for `on` * add changelog --------- Co-authored-by: Ryan Carniato <ryansolid@gmail.com>
1 parent 13b1fa6 commit 8b49110

3 files changed

Lines changed: 25 additions & 1 deletion

File tree

.changeset/red-pears-rush.md

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
---
2+
"solid-js": patch
3+
---
4+
5+
Allow passing defer:boolean to `on`

packages/solid/src/reactive/signal.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -922,7 +922,7 @@ export function on<S, Next extends Prev, Prev = Next>(
922922
export function on<S, Next extends Prev, Prev = Next>(
923923
deps: AccessorArray<S> | Accessor<S>,
924924
fn: OnEffectFunction<S, undefined | NoInfer<Prev>, Next>,
925-
options: OnOptions & { defer: true }
925+
options: OnOptions | { defer: true }
926926
): EffectFunction<undefined | NoInfer<Next>>;
927927
export function on<S, Next extends Prev, Prev = Next>(
928928
deps: AccessorArray<S> | Accessor<S>,

packages/solid/test/signals.type-tests.ts

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -710,6 +710,25 @@ const onMemo3 = createMemo(
710710
);
711711
// @ts-expect-error when deferred the type includes undefined
712712
const onMemo4: Accessor<number> = onMemo3;
713+
// Allow passing boolean to defer
714+
const memoCreator = (defer: boolean) =>
715+
createMemo(
716+
on(
717+
[one, two],
718+
(input, prevInput, prev) => {
719+
const [one, two]: [number, boolean] = input;
720+
if (prevInput) {
721+
const [prevOne, prevTwo]: [number, boolean] = prevInput;
722+
}
723+
// @ts-expect-error FIXME computed type is unknown, should be `number`.
724+
const _prev: number = prev;
725+
return one + +two;
726+
},
727+
{ defer }
728+
)
729+
);
730+
const memoCreator1: Accessor<number | undefined> = memoCreator(true);
731+
const memoCreator2: Accessor<number | undefined> = memoCreator(false);
713732

714733
//////////////////////////////////////////////////////////////////////////
715734
// createSelector ////////////////////////////////////////////////////////

0 commit comments

Comments
 (0)