Skip to content

Commit 9c1a506

Browse files
authored
fix: adjust order of derived function definition overloads (#11426)
Turns out the order is crucial for not getting a type error fixes #11415
1 parent 9c5a9d8 commit 9c1a506

File tree

5 files changed

+23
-10
lines changed

5 files changed

+23
-10
lines changed

.changeset/giant-bananas-turn.md

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
---
2+
"svelte": patch
3+
---
4+
5+
fix: adjust order of `derived` function definition overloads

packages/svelte/src/store/index.js

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -111,7 +111,7 @@ export function writable(value, start = noop) {
111111
* @template T
112112
* @overload
113113
* @param {S} stores
114-
* @param {(values: import('./private.js').StoresValues<S>) => T} fn
114+
* @param {(values: import('./private.js').StoresValues<S>, set: (value: T) => void, update: (fn: import('./public.js').Updater<T>) => void) => import('./public.js').Unsubscriber | void} fn
115115
* @param {T} [initial_value]
116116
* @returns {import('./public.js').Readable<T>}
117117
*/
@@ -124,7 +124,7 @@ export function writable(value, start = noop) {
124124
* @template T
125125
* @overload
126126
* @param {S} stores
127-
* @param {(values: import('./private.js').StoresValues<S>, set: (value: T) => void, update: (fn: import('./public.js').Updater<T>) => void) => import('./public.js').Unsubscriber | void} fn
127+
* @param {(values: import('./private.js').StoresValues<S>) => T} fn
128128
* @param {T} [initial_value]
129129
* @returns {import('./public.js').Readable<T>}
130130
*/

packages/svelte/tests/store/test.ts

Lines changed: 0 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -272,7 +272,6 @@ describe('derived', () => {
272272
const number = writable(1);
273273
const evens = derived(
274274
number,
275-
// @ts-expect-error TODO feels like inference should work here
276275
(n, set) => {
277276
if (n % 2 === 0) set(n);
278277
},
@@ -303,10 +302,8 @@ describe('derived', () => {
303302
const number = writable(1);
304303
const evensAndSquaresOf4 = derived(
305304
number,
306-
// @ts-expect-error TODO feels like inference should work here
307305
(n, set, update) => {
308306
if (n % 2 === 0) set(n);
309-
// @ts-expect-error TODO feels like inference should work here
310307
if (n % 4 === 0) update((n) => n * n);
311308
},
312309
0
@@ -442,7 +439,6 @@ describe('derived', () => {
442439
const values: number[] = [];
443440
const cleaned_up: number[] = [];
444441

445-
// @ts-expect-error TODO feels like inference should work here
446442
const d = derived(num, ($num, set) => {
447443
set($num * 2);
448444

@@ -516,7 +512,6 @@ describe('derived', () => {
516512
const a = writable(true);
517513
let b_started = false;
518514

519-
// @ts-expect-error TODO feels like inference should work here
520515
const b = derived(a, (_, __) => {
521516
b_started = true;
522517
return () => {
@@ -525,7 +520,6 @@ describe('derived', () => {
525520
};
526521
});
527522

528-
// @ts-expect-error TODO feels like inference should work here
529523
const c = derived(a, ($a, set) => {
530524
if ($a) return b.subscribe(set);
531525
});

packages/svelte/tests/types/store.ts

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,3 +11,17 @@ derived([a], ([aVal]) => {
1111
aVal === '';
1212
return aVal === true;
1313
});
14+
15+
derived(
16+
a,
17+
(value, set) => {
18+
set('works');
19+
// @ts-expect-error
20+
set(true);
21+
22+
value === true;
23+
// @ts-expect-error
24+
value === '';
25+
},
26+
''
27+
);

packages/svelte/types/index.d.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2157,14 +2157,14 @@ declare module 'svelte/store' {
21572157
*
21582158
* https://svelte.dev/docs/svelte-store#derived
21592159
* */
2160-
export function derived<S extends Stores, T>(stores: S, fn: (values: StoresValues<S>) => T, initial_value?: T | undefined): Readable<T>;
2160+
export function derived<S extends Stores, T>(stores: S, fn: (values: StoresValues<S>, set: (value: T) => void, update: (fn: Updater<T>) => void) => Unsubscriber | void, initial_value?: T | undefined): Readable<T>;
21612161
/**
21622162
* Derived value store by synchronizing one or more readable stores and
21632163
* applying an aggregation function over its input values.
21642164
*
21652165
* https://svelte.dev/docs/svelte-store#derived
21662166
* */
2167-
export function derived<S extends Stores, T>(stores: S, fn: (values: StoresValues<S>, set: (value: T) => void, update: (fn: Updater<T>) => void) => Unsubscriber | void, initial_value?: T | undefined): Readable<T>;
2167+
export function derived<S extends Stores, T>(stores: S, fn: (values: StoresValues<S>) => T, initial_value?: T | undefined): Readable<T>;
21682168
/**
21692169
* Takes a store and returns a new one derived from the old one that is readable.
21702170
*

0 commit comments

Comments
 (0)