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 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 []