From 9d74ecbd026de4a1324f2c98087d6f34d0b25fb1 Mon Sep 17 00:00:00 2001 From: Jungzl <13jungzl@gmail.com> Date: Mon, 29 Sep 2025 11:14:33 +0800 Subject: [PATCH 1/2] fix: preserve tuple type in `$state.snapshot` --- .changeset/lucky-moles-enjoy.md | 5 +++++ packages/svelte/src/ambient.d.ts | 16 +++++++++------- packages/svelte/types/index.d.ts | 16 +++++++++------- 3 files changed, 23 insertions(+), 14 deletions(-) create mode 100644 .changeset/lucky-moles-enjoy.md diff --git a/.changeset/lucky-moles-enjoy.md b/.changeset/lucky-moles-enjoy.md new file mode 100644 index 000000000000..6802de34d35c --- /dev/null +++ b/.changeset/lucky-moles-enjoy.md @@ -0,0 +1,5 @@ +--- +'svelte': patch +--- + +preserve tuple type in `$state.snapshot` diff --git a/packages/svelte/src/ambient.d.ts b/packages/svelte/src/ambient.d.ts index 59128e45f002..d655fb648a2f 100644 --- a/packages/svelte/src/ambient.d.ts +++ b/packages/svelte/src/ambient.d.ts @@ -85,13 +85,15 @@ declare namespace $state { ? NonReactive : T extends { toJSON(): infer R } ? R - : T extends Array - ? Array> - : T extends object - ? T extends { [key: string]: any } - ? { [K in keyof T]: Snapshot } - : never - : never; + : T extends readonly unknown[] + ? { [K in keyof T]: Snapshot } + : T extends Array + ? Array> + : T extends object + ? T extends { [key: string]: any } + ? { [K in keyof T]: Snapshot } + : never + : never; /** * Declares state that is _not_ made deeply reactive — instead of mutating it, diff --git a/packages/svelte/types/index.d.ts b/packages/svelte/types/index.d.ts index 2c015b5a10ae..6dc6629faad5 100644 --- a/packages/svelte/types/index.d.ts +++ b/packages/svelte/types/index.d.ts @@ -3171,13 +3171,15 @@ declare namespace $state { ? NonReactive : T extends { toJSON(): infer R } ? R - : T extends Array - ? Array> - : T extends object - ? T extends { [key: string]: any } - ? { [K in keyof T]: Snapshot } - : never - : never; + : T extends readonly unknown[] + ? { [K in keyof T]: Snapshot } + : T extends Array + ? Array> + : T extends object + ? T extends { [key: string]: any } + ? { [K in keyof T]: Snapshot } + : never + : never; /** * Declares state that is _not_ made deeply reactive — instead of mutating it, From 5edc0ab6747b9917e1fc8a0ba18ec5466e77320e Mon Sep 17 00:00:00 2001 From: Rich Harris Date: Wed, 1 Oct 2025 11:57:31 -0400 Subject: [PATCH 2/2] Update .changeset/lucky-moles-enjoy.md --- .changeset/lucky-moles-enjoy.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.changeset/lucky-moles-enjoy.md b/.changeset/lucky-moles-enjoy.md index 6802de34d35c..ef1dfe4bdd69 100644 --- a/.changeset/lucky-moles-enjoy.md +++ b/.changeset/lucky-moles-enjoy.md @@ -2,4 +2,4 @@ 'svelte': patch --- -preserve tuple type in `$state.snapshot` +fix: preserve tuple type in `$state.snapshot`