Fix: Correctly type for RouteLocation['params'] #8006
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.
What is it?
Description
There is a flaw in the type of RouteLocation['params']
The property values are currently typed as string, but they can be undefined at runtime when a path parameter not present in the URL.
Example demonstrating the issue:
const chatId = useLocation().params.id
console.log('full path:', useLocation().url.href)
console.log('chatId:', chatId)
console.log('typeof chatId:', typeof chatId)
Log 1:
full path: http://localhost/chats/
chatId: undefined
typeof chatId: undefined
Log 2:
full path: http://localhost/chats/1/
chatId: 1
typeof chatId: string
The type definition has been updated to correctly reflect this runtime behavior.
Before: readonly params: Readonly<Record<string, string>>
After: readonly params: Readonly<Record<string, string | undefined>>