diff --git a/packages/solid/src/reactive/signal.ts b/packages/solid/src/reactive/signal.ts index 59857ced9..fa1a37168 100644 --- a/packages/solid/src/reactive/signal.ts +++ b/packages/solid/src/reactive/signal.ts @@ -477,17 +477,17 @@ export function on any)[], U>( deps: [...T], fn: (input: ReturnTypes, prevInput: ReturnTypes, prevValue?: U) => U, options?: { defer?: boolean } -): (prevValue?: U) => U | undefined; +): (prevValue?: U) => U; export function on any, U>( deps: T, fn: (input: ReturnType, prevInput: ReturnType, prevValue?: U) => U, options?: { defer?: boolean } -): (prevValue?: U) => U | undefined; +): (prevValue?: U) => U; export function on any) | (() => any)[], U>( deps: T, fn: (input: ReturnTypes, prevInput: ReturnTypes, prevValue?: U) => U, options?: { defer?: boolean } -): (prevValue?: U) => U | undefined { +): (prevValue?: U) => U { const isArray = Array.isArray(deps); let prevInput: ReturnTypes; let defer = options && options.defer; @@ -499,7 +499,8 @@ export function on any) | (() => any)[], U>( } else input = (deps as () => T)() as any; if (defer) { defer = false; - return undefined; + // this aspect of first run on deferred is hidden from end user and should not affect types + return undefined as unknown as U; } const result = untrack(() => fn!(input, prevInput, prevValue)); prevInput = input;