From 85ba82cae5ad2f394125c075932967e59ae88cd4 Mon Sep 17 00:00:00 2001 From: Lazizbek Ergashev Date: Fri, 7 Aug 2026 04:45:15 +0500 Subject: [PATCH] fix(lit-query): add DataTag to the queryKey returned by infiniteQueryOptions --- .changeset/wise-doors-shout.md | 5 +++++ .../lit-query/src/infiniteQueryOptions.ts | 14 ++++++++---- .../src/tests/type-inference.test.ts | 22 +++++++++++++++++++ 3 files changed, 37 insertions(+), 4 deletions(-) create mode 100644 .changeset/wise-doors-shout.md diff --git a/.changeset/wise-doors-shout.md b/.changeset/wise-doors-shout.md new file mode 100644 index 00000000000..8be502412a4 --- /dev/null +++ b/.changeset/wise-doors-shout.md @@ -0,0 +1,5 @@ +--- +'@tanstack/lit-query': patch +--- + +Brand the `queryKey` returned by `infiniteQueryOptions` with `DataTag` so `getQueryData` and `setQueryData` infer `InfiniteData` instead of `unknown`. diff --git a/packages/lit-query/src/infiniteQueryOptions.ts b/packages/lit-query/src/infiniteQueryOptions.ts index f4bc8851ebe..c694e6aab5a 100644 --- a/packages/lit-query/src/infiniteQueryOptions.ts +++ b/packages/lit-query/src/infiniteQueryOptions.ts @@ -1,4 +1,5 @@ import type { + DataTag, DefaultError, InfiniteData, InfiniteQueryObserverOptions, @@ -6,10 +7,11 @@ import type { } from '@tanstack/query-core' /** - * Preserves and types infinite query options for reuse across Lit Query APIs. + * Brands infinite query options so the `queryKey` carries the infinite query + * data and error types across TanStack Query APIs. * - * @param options - Infinite query options to preserve. - * @returns The same options object. + * @param options - Infinite query options to preserve and brand. + * @returns The same options object with a typed `queryKey`. * * @example * ```ts @@ -43,6 +45,10 @@ export function infiniteQueryOptions< TData, TQueryKey, TPageParam -> { +> & { + queryKey: DataTag, TError> +} + +export function infiniteQueryOptions(options: unknown) { return options } diff --git a/packages/lit-query/src/tests/type-inference.test.ts b/packages/lit-query/src/tests/type-inference.test.ts index e8c6c3c525d..969935b5aa6 100644 --- a/packages/lit-query/src/tests/type-inference.test.ts +++ b/packages/lit-query/src/tests/type-inference.test.ts @@ -2,6 +2,7 @@ import { dataTagSymbol, QueryClient, type DefinedQueryObserverResult, + type InfiniteData, type QueryObserverResult, } from '@tanstack/query-core' import { describe, expectTypeOf, it } from 'vitest' @@ -206,5 +207,26 @@ describe('type inference', () => { expectTypeOf(infinite().data?.pages).toEqualTypeOf< Array<{ page: number }> | undefined >() + + const infiniteQueryOpts = infiniteQueryOptions({ + queryKey: ['type-inference', 'infinite-query-options'] as const, + initialPageParam: 0, + queryFn: async () => ({ page: 3 }), + getNextPageParam: (lastPage) => lastPage.page + 1, + }) + expectTypeOf(infiniteQueryOpts.queryKey[dataTagSymbol]).toEqualTypeOf< + InfiniteData<{ page: number }> + >() + const cachedPages = client.getQueryData(infiniteQueryOpts.queryKey) + expectTypeOf(cachedPages).toEqualTypeOf< + InfiniteData<{ page: number }> | undefined + >() + const updatedPages = client.setQueryData(infiniteQueryOpts.queryKey, { + pages: [{ page: 4 }], + pageParams: [0], + }) + expectTypeOf(updatedPages).toEqualTypeOf< + InfiniteData<{ page: number }> | undefined + >() }) })