Inferred type references an inaccessible unique symbol type after updating from 5.61.5 to 5.62.0
Describe the bug
After updating TanStack from version 5.61.5 to 5.62.0 (not solved with 5.69.0), I encountered the following TypeScript error on every function that returns queryOptions or infiniteQueryOptions:
TS2527: The inferred type of 'queryPlan' references an inaccessible 'unique symbol' type. A type annotation is necessary.
Your minimal, reproducible example
https://www.typescriptlang.org/play/?ts=5.7.3#code/JYWwDg9gTgLgBAbwLACg5wI4FcCmUCeA8mDMBAHYDOANKusOQGYPAw4CKuBxpFlqAXziMoEEHADkAARgBDKnIDGAawD08gOZYANrKgBabHnz6cADzB5QOcnO0SA3KlSLdlSnACiZ2eG04AZTwAN2BFHEQ6ODAsACNtMMwuInIcAApzXzB-AEkAEwAuOHIsEFi8AEpItHQ4KBwYLChyJOMeMio05Bra1oIAaRx8IoBtCQkAXVoe2qMCADFyIrSKouCIYDy4AF4APkQBad70G1l4nEK4AEIrzL8cfKPagQqnFAFnFBj4xLn8AFl5PgVtVevVGs04AxmORWBxku0+F0or0-oNhnAxpMnqjkotlmBZBocAAFPS+VZwdabHb7BCHFG1FikWTaMnEslQXxFACMONqxJgJPqoQgWEo7NJ5JAyyqezgfMZ6EFADlzEKiVKuTK4CD5TzGS83h93kA
Steps to reproduce
Inside a Angular's service :
public queryOne(exampleId: number) {
return queryOptions({
queryKey: [this.getFetchPath(...)],
queryFn: (): Promise<ExampleDTO[]> => this.getOne(...),
enabled: !!exampleId,
});
}
public queryMany(paramsData) {
return infiniteQueryOptions({
queryKey: [...],
queryFn: (pageParam): Promise<ExampleDTO[]> => this.getMany(...),
...,
});
}
Expected behavior
The code should compile without any TypeScript errors without any type annotation.
How often does this bug happen?
Every time
Screenshots or Videos
No response
Platform
- OS: Windows
- Framework: Angular v19.2.2
Tanstack Query adapter
angular-query
TanStack Query version
v5.62.0
TypeScript version
v5.7.3
Additional context
I managed to get rid of this error by annotating queryOptions and function return type :
public queryMany(...): CreateQueryOptions<ExampleDTO[]> {
return queryOptions<ExampleDTO[]>(...);
}
However, unable to annotate properly infiniteQueryOptions because I got another type error :
public queryManyWithPagination(...): CreateInfiniteQueryOptions<ExampleDTO[]> {
return infiniteQueryOptions<ExampleDTO[]>(...);
}
TS2322: Type CreateInfiniteQueryOptions<StopPointResponseDTO[], Error, InfiniteData<StopPointResponseDTO[], unknown>, StopPointResponseDTO[], readonly unknown[], unknown> & { ...; } & { ...; } is not assignable to type CreateInfiniteQueryOptions<StopPointResponseDTO[], Error, StopPointResponseDTO[], StopPointResponseDTO[], readonly unknown[], unknown>
Doesn't seem to be an angular-query specific issue. Same issue occurs for @tanstack/solid-query
This may be the same problem as #8453 which isn't fully solved
@TkDodo FYI
@antoine-delahaye Could you re-check your TypeScript playground reproduction if there's still any problem? I currently do not see a type error there.
It's still being reproduced with solid-query when I'm trying to generate type declarations for my api client package that generates queries with @hey-api/openapi-ts. TypeError starts to appear if you have delcaration: true in your tsconfig
It's still being reproduced with solid-query: TypeError starts to appear if you have
delcaration: truein your tsconfig
Confirm for solid-query 5.81.5
Same issue with"@tanstack/solid-query": "^5.83.0".
When declaration: true is set in tsconfig, every exported const that returns a queryOptions factory causes the mentioned error. However, if the export keyword is removed or declarations are disabled, the error no longer occurs.
export const someQueryOptions = (param: string) =>
queryOptions({
queryFn: async () => {
return [];
},
queryKey: ["some", "key", param],
});
TS2527: The inferred type of
someQueryOptionsreferences an inaccessibleunique symboltype. A type annotation is necessary.
EDIT: Downgrade to v5.61.5 removes this issue.
I think isn't reproducible on Angular anymore since aligning with the latest react-query queryOptions.
That might fix it for the Solid adapter too.
Still reproduces on version 5.85.2 of solid-query
Here's a rather minimal stackblitz example https://stackblitz.com/edit/solidjs-templates-5z94gjr6?file=src%2Fapi%2FqueryOptions.ts
Because of this issue it's impossible to make a usable typesafe package with exported predefined queryOptions for useQuery with versions after 5.61.5
someone please take a look at the differences between the angular, react and solid queryOptions implementation. It works fine in react:
https://www.typescriptlang.org/play/?#code/JYWwDg9gTgLgBAbzgRwK4FMoE8DyYbAQB2AznAL5wBmUEIcA5AAIwCGpbAxgNYD0U6VpxgBaNJiwMA3ACgZ6AB6RYcTsRLwSrcABt0ARQzY8BdXAC8cABQBKCwD4ZcFEdz5CpKwifOXEgGJEAFxwrCRYRJzWSOLYANLoWAA0cCTAAOZErDoUdub2iD6+cAIwqFBEiHAAFug6OhAhDADu0DoAJgwUssXkSUV+8YkhANoMWroGrgwAuv3O5DayQA
so it shouldn’t be too hard to figure out what solid is doing differntly
the same error shows up in svelte-query as well: https://www.typescriptlang.org/play/?#code/ATCWFsAcHsCcBdgG9gEcCuBTWBPA8pPKNAHYDOwAvsAGazTjADkAAvAIbkcDGA1gPRkAbpgA28TAFoM2HEwBQ8zAA8YCYN1JlEwsRICKWXASJbgAXhAzjhYuQAUSeSCtGcAaUw4AXMADaTADm9OiQZEwAugA0zi7WOABiJL72AJQWAHzIlDEuwNrsopgAKhCYvgCswABUwACMAAxNuVSpQA
the same fix from #9668 can be applied
Still shows up for infiniteQueryOptions in solid-query. I feel like the same fix could be applied too
@vbifonixor Please create a new issue with a repro. That allows anyone that wants to work on it to clearly see the issue and that it's for solid-query specifically. If you want to fix this you're welcome to submit a PR ofcourse.