From 6c0c7978db89855cf1203e0102c354a9ae741078 Mon Sep 17 00:00:00 2001 From: TkDodo Date: Fri, 14 Nov 2025 09:06:43 +0100 Subject: [PATCH 1/2] fix(types): do not drop readonly for partial QueryFilter matching --- packages/query-core/src/__tests__/utils.test-d.tsx | 14 +++++++++++++- packages/query-core/src/utils.ts | 2 +- 2 files changed, 14 insertions(+), 2 deletions(-) diff --git a/packages/query-core/src/__tests__/utils.test-d.tsx b/packages/query-core/src/__tests__/utils.test-d.tsx index 3aacc61b81..8c87636e9a 100644 --- a/packages/query-core/src/__tests__/utils.test-d.tsx +++ b/packages/query-core/src/__tests__/utils.test-d.tsx @@ -50,7 +50,7 @@ describe('QueryFilters', () => { expectTypeOf(filters.queryKey).toEqualTypeOf< | undefined | readonly [] - | ['key'] + | readonly ['key'] | readonly [ 'key', { @@ -61,6 +61,18 @@ describe('QueryFilters', () => { >() }) + it('should work with readonly union types', () => { + const filters: QueryFilters< + readonly ['key'] | readonly ['key', 'something'] + > = { + queryKey: ['key'], + } + + expectTypeOf(filters.queryKey).toEqualTypeOf< + undefined | readonly [] | readonly ['key'] | readonly ['key', 'something'] + >() + }) + it('should error on invalid query keys', () => { assertType>({ // @ts-expect-error cannot pass invalid query key diff --git a/packages/query-core/src/utils.ts b/packages/query-core/src/utils.ts index 1be53edd2d..7f3baf25fc 100644 --- a/packages/query-core/src/utils.ts +++ b/packages/query-core/src/utils.ts @@ -20,7 +20,7 @@ type DropLast> = T extends readonly [ ...infer R, unknown, ] - ? R + ? readonly [...R] : never type TuplePrefixes> = T extends readonly [] From f918a31c1fe2c8b8b7603638a6daa5f8f7645c98 Mon Sep 17 00:00:00 2001 From: Dominik Dorfmeister Date: Fri, 14 Nov 2025 09:14:18 +0100 Subject: [PATCH 2/2] Create new-keys-raise.md --- .changeset/new-keys-raise.md | 5 +++++ 1 file changed, 5 insertions(+) create mode 100644 .changeset/new-keys-raise.md diff --git a/.changeset/new-keys-raise.md b/.changeset/new-keys-raise.md new file mode 100644 index 0000000000..ac6729f13c --- /dev/null +++ b/.changeset/new-keys-raise.md @@ -0,0 +1,5 @@ +--- +"@tanstack/query-core": patch +--- + +fix(types): do not drop readonly for partial QueryFilter matching