From 949c026259eb7d10cb50c92eec01f542b3916e05 Mon Sep 17 00:00:00 2001 From: Jungzl <13jungzl@gmail.com> Date: Thu, 2 Oct 2025 00:04:03 +0800 Subject: [PATCH] fix: preserve tuple type in `$state.snapshot` (#16864) * fix: preserve tuple type in `$state.snapshot` * Update .changeset/lucky-moles-enjoy.md --------- Co-authored-by: Rich Harris --- .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 0000000000..ef1dfe4bdd --- /dev/null +++ b/.changeset/lucky-moles-enjoy.md @@ -0,0 +1,5 @@ +--- +'svelte': patch +--- + +fix: preserve tuple type in `$state.snapshot` diff --git a/packages/svelte/src/ambient.d.ts b/packages/svelte/src/ambient.d.ts index 59128e45f0..d655fb648a 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 2c015b5a10..6dc6629faa 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,