diff --git a/.changeset/quiet-mice-invent.md b/.changeset/quiet-mice-invent.md new file mode 100644 index 00000000000..bf601aaad60 --- /dev/null +++ b/.changeset/quiet-mice-invent.md @@ -0,0 +1,5 @@ +--- +'@tanstack/lit-query': patch +--- + +feat: add `DataTag` branding to `infiniteQueryOptions` queryKey so `setQueryData`/`getQueryData` infer the `InfiniteData` type, matching `queryOptions` and the other adapters diff --git a/packages/lit-query/src/infiniteQueryOptions.ts b/packages/lit-query/src/infiniteQueryOptions.ts index f4bc8851ebe..7f31a939883 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, @@ -43,6 +44,8 @@ export function infiniteQueryOptions< TData, TQueryKey, TPageParam -> { +> & { + queryKey: DataTag, TError> +} { 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..42d9d1578d1 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 infiniteOpts = infiniteQueryOptions({ + queryKey: ['type-inference', 'infinite-options'] as const, + initialPageParam: 0, + queryFn: async () => ({ page: 2 }), + getNextPageParam: (lastPage) => lastPage.page + 1, + }) + expectTypeOf(infiniteOpts.queryKey[dataTagSymbol]).toEqualTypeOf< + InfiniteData<{ page: number }> + >() + const cachedInfinite = client.getQueryData(infiniteOpts.queryKey) + expectTypeOf(cachedInfinite).toEqualTypeOf< + InfiniteData<{ page: number }> | undefined + >() + const updatedInfinite = client.setQueryData(infiniteOpts.queryKey, { + pages: [{ page: 3 }], + pageParams: [0], + }) + expectTypeOf(updatedInfinite).toEqualTypeOf< + InfiniteData<{ page: number }> | undefined + >() }) })