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,