Resolve QueryKeyManager type errors by allowing nested key trees #3
+24
−9
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
I was hyped about this package but when I first installed it and copy-pasted example from the
README.md
I've got a lot of type errors, I was not able to find a workaround and decided to research the code.All issues were looking approximately like this:
I was encountering them even when I've installed this initial repo.
So what I've decided to change and why with a small help of Cursor:
Allow nested maps
create
expected a flatRecord<string, QueryKeyBuilder>
, so{ users: { list: ... } }
made TS thinkusers
must be a function, causing “'list' does not exist in type 'QueryKeyBuilder<[]>'”.create
accepts aQueryKeyTree
(object tree). I added a recursive register that descends into objects and registers any functions it finds. This enables nested namespaces likeadmin.users.list
.Unify stored builder type
StoredQueryKeyBuilder
of type(...args: unknown[]) => QueryKey
. This erases arg specifics for storage, keeping runtime behavior intact while avoiding type incompatibilities.Support any builder arity
QueryKeyBuilder
defaulted to[]
(no args), so single-arg builders failed with “Target signature provides too few arguments.”QueryKeyBuilder
defaults tounknown[]
, so builders with any number/types of args are assignable without casts.We can now define flat or nested key maps with builders of any arity, and TS no longer complains about unknown properties or argument count mismatches.
Also I've change all
any
tounknown
for more semantic typisation.