diff --git a/.changeset/lucky-moles-enjoy.md b/.changeset/lucky-moles-enjoy.md new file mode 100644 index 000000000000..ef1dfe4bdd69 --- /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 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,