Skip to content

Commit 91a7e9f

Browse files
fix: fix "Type 'string' is not assignable to type 'undefined'" in loader.navigate / router.preload (#910)
1 parent 56447e9 commit 91a7e9f

File tree

4 files changed

+35
-30
lines changed

4 files changed

+35
-30
lines changed

examples/react/kitchen-sink/src/main.tsx

Lines changed: 8 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -306,20 +306,20 @@ const invoiceRoute = new Route({
306306

307307
function InvoiceComponent() {
308308
const search = invoiceRoute.useSearch()
309-
const navigate = useNavigate()
309+
const navigate = useNavigate({ from: invoiceRoute.id })
310310
const invoice = invoiceRoute.useLoaderData()
311311
const updateInvoiceMutation = useMutation({
312312
fn: patchInvoice,
313313
onSuccess: () => router.invalidate(),
314314
})
315315
const [notes, setNotes] = React.useState(search.notes ?? '')
316-
317316
React.useEffect(() => {
318317
navigate({
319318
search: (old) => ({
320319
...old,
321320
notes: notes ? notes : undefined,
322321
}),
322+
params: true,
323323
replace: true,
324324
})
325325
}, [notes])
@@ -345,11 +345,14 @@ function InvoiceComponent() {
345345
/>
346346
<div>
347347
<Link
348+
from={invoiceRoute.id}
349+
to={invoiceRoute.to}
348350
search={(old) => ({
349351
...old,
350352
showNotes: old?.showNotes ? undefined : true,
351353
})}
352354
className="text-lime-700"
355+
params={true}
353356
>
354357
{search.showNotes ? 'Close Notes' : 'Show Notes'}{' '}
355358
</Link>
@@ -428,7 +431,7 @@ const usersRoute = new Route({
428431
})
429432

430433
function UsersComponent() {
431-
const navigate = useNavigate()
434+
const navigate = useNavigate({from: usersRoute.id})
432435
const { usersView } = usersRoute.useSearch()
433436
const users = usersRoute.useLoaderData()
434437
const sortBy = usersView?.sortBy ?? 'name'
@@ -451,6 +454,7 @@ function UsersComponent() {
451454
},
452455
}
453456
},
457+
params: true,
454458
replace: true,
455459
})
456460

@@ -465,6 +469,7 @@ function UsersComponent() {
465469
},
466470
}
467471
},
472+
params: true,
468473
replace: true,
469474
})
470475
}, [filterDraft])

packages/react-router/src/RouterProvider.tsx

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -41,9 +41,9 @@ export interface MatchLocation {
4141

4242
export type NavigateFn<TRouteTree extends AnyRoute> = <
4343
TFrom extends RoutePaths<TRouteTree> | string = string,
44-
TTo extends string | undefined = undefined,
44+
TTo extends string = '',
4545
TMaskFrom extends RoutePaths<TRouteTree> | string = TFrom,
46-
TMaskTo extends string | undefined = undefined,
46+
TMaskTo extends string = '',
4747
>(
4848
opts: NavigateOptions<TRouteTree, TFrom, TTo, TMaskFrom, TMaskTo>,
4949
) => Promise<void>

packages/react-router/src/link.tsx

Lines changed: 15 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -118,9 +118,9 @@ export type RelativeToPathAutoComplete<
118118
export type NavigateOptions<
119119
TRouteTree extends AnyRoute = RegisteredRouter['routeTree'],
120120
TFrom extends RoutePaths<TRouteTree> | string = string,
121-
TTo extends string | undefined = undefined,
121+
TTo extends string = '',
122122
TMaskFrom extends RoutePaths<TRouteTree> | string = TFrom,
123-
TMaskTo extends string | undefined = undefined,
123+
TMaskTo extends string = '',
124124
> = ToOptions<TRouteTree, TFrom, TTo, TMaskFrom, TMaskTo> & {
125125
// `replace` is a boolean that determines whether the navigation should replace the current history entry or push a new one.
126126
replace?: boolean
@@ -132,25 +132,25 @@ export type NavigateOptions<
132132
export type ToOptions<
133133
TRouteTree extends AnyRoute = RegisteredRouter['routeTree'],
134134
TFrom extends RoutePaths<TRouteTree> | string = string,
135-
TTo extends string | undefined = undefined,
135+
TTo extends string = '',
136136
TMaskFrom extends RoutePaths<TRouteTree> | string = TFrom,
137-
TMaskTo extends string | undefined = undefined,
137+
TMaskTo extends string = '',
138138
> = ToSubOptions<TRouteTree, TFrom, TTo> & {
139139
mask?: ToMaskOptions<TRouteTree, TMaskFrom, TMaskTo>
140140
}
141141

142142
export type ToMaskOptions<
143143
TRouteTree extends AnyRoute = RegisteredRouter['routeTree'],
144144
TMaskFrom extends RoutePaths<TRouteTree> | string = string,
145-
TMaskTo extends string | undefined = undefined,
145+
TMaskTo extends string = '',
146146
> = ToSubOptions<TRouteTree, TMaskFrom, TMaskTo> & {
147147
unmaskOnReload?: boolean
148148
}
149149

150150
export type ToSubOptions<
151151
TRouteTree extends AnyRoute = RegisteredRouter['routeTree'],
152152
TFrom extends RoutePaths<TRouteTree> | string = string,
153-
TTo extends string | undefined = undefined,
153+
TTo extends string = '',
154154
TResolved = ResolveRelativePath<TFrom, NoInfer<TTo>>,
155155
> = {
156156
to?: ToPathOption<TRouteTree, TFrom, TTo>
@@ -174,7 +174,7 @@ export type ParamOptions<
174174
TResolved,
175175
TParamVariant extends 'allParams' | 'fullSearchSchema',
176176
TFromParams = Expand<RouteByPath<TRouteTree, TFrom>['types'][TParamVariant]>,
177-
TToParams = TTo extends undefined
177+
TToParams = TTo extends ''
178178
? TFromParams
179179
: never extends TResolved
180180
? Expand<RouteByPath<TRouteTree, TTo>['types'][TParamVariant]>
@@ -212,7 +212,7 @@ export type PathParamOptions<
212212
export type ToPathOption<
213213
TRouteTree extends AnyRoute = AnyRoute,
214214
TFrom extends RoutePaths<TRouteTree> | string = string,
215-
TTo extends string | undefined = undefined,
215+
TTo extends string = '',
216216
> =
217217
| TTo
218218
| RelativeToPathAutoComplete<
@@ -224,7 +224,7 @@ export type ToPathOption<
224224
export type ToIdOption<
225225
TRouteTree extends AnyRoute = AnyRoute,
226226
TFrom extends RoutePaths<TRouteTree> | undefined = undefined,
227-
TTo extends string | undefined = undefined,
227+
TTo extends string = '',
228228
> =
229229
| TTo
230230
| RelativeToPathAutoComplete<
@@ -242,9 +242,9 @@ export interface ActiveOptions {
242242
export type LinkOptions<
243243
TRouteTree extends AnyRoute = RegisteredRouter['routeTree'],
244244
TFrom extends RoutePaths<TRouteTree> | string = string,
245-
TTo extends string | undefined = undefined,
245+
TTo extends string = '',
246246
TMaskFrom extends RoutePaths<TRouteTree> | string = TFrom,
247-
TMaskTo extends string | undefined = undefined,
247+
TMaskTo extends string = '',
248248
> = NavigateOptions<TRouteTree, TFrom, TTo, TMaskFrom, TMaskTo> & {
249249
// The standard anchor tag target attribute
250250
target?: HTMLAnchorElement['target']
@@ -334,9 +334,9 @@ const preloadWarning = 'Error preloading route! ☝️'
334334
export function useLinkProps<
335335
TRouteTree extends AnyRoute = RegisteredRouter['routeTree'],
336336
TFrom extends RoutePaths<TRouteTree> | string = string,
337-
TTo extends string | undefined = undefined,
337+
TTo extends string = '',
338338
TMaskFrom extends RoutePaths<TRouteTree> | string = TFrom,
339-
TMaskTo extends string | undefined = undefined,
339+
TMaskTo extends string = '',
340340
>(
341341
options: UseLinkPropsOptions<TRouteTree, TFrom, TTo, TMaskFrom, TMaskTo>,
342342
): React.AnchorHTMLAttributes<HTMLAnchorElement> {
@@ -553,9 +553,9 @@ export interface LinkComponent<TProps extends Record<string, any> = {}> {
553553
<
554554
TRouteTree extends AnyRoute = RegisteredRouter['routeTree'],
555555
TFrom extends RoutePaths<TRouteTree> | string = string,
556-
TTo extends string | undefined = undefined,
556+
TTo extends string = '',
557557
TMaskFrom extends RoutePaths<TRouteTree> | string = TFrom,
558-
TMaskTo extends string | undefined = undefined,
558+
TMaskTo extends string = '',
559559
>(
560560
props: LinkProps<TRouteTree, TFrom, TTo, TMaskFrom, TMaskTo> &
561561
TProps &

packages/react-router/src/useNavigate.tsx

Lines changed: 10 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -20,9 +20,9 @@ export function useNavigate<
2020
return React.useCallback(
2121
<
2222
TFrom extends RoutePaths<TRouteTree> | string = TDefaultFrom,
23-
TTo extends string | undefined = undefined,
23+
TTo extends string = '',
2424
TMaskFrom extends RoutePaths<TRouteTree>| string = TFrom,
25-
TMaskTo extends string | undefined = undefined,
25+
TMaskTo extends string = '',
2626
>({
2727
from,
2828
...rest
@@ -54,9 +54,9 @@ export function useNavigate<
5454
export function Navigate<
5555
TRouteTree extends AnyRoute = RegisteredRouter['routeTree'],
5656
TFrom extends RoutePaths<TRouteTree> | string = string,
57-
TTo extends string | undefined = undefined,
57+
TTo extends string = '',
5858
TMaskFrom extends RoutePaths<TRouteTree> | string = TFrom,
59-
TMaskTo extends string | undefined = undefined,
59+
TMaskTo extends string = '',
6060
>(props: NavigateOptions<TRouteTree, TFrom, TTo, TMaskFrom, TMaskTo>): null {
6161
const { navigate } = useRouter()
6262
const match = useMatch({ strict: false })
@@ -74,18 +74,18 @@ export function Navigate<
7474
export type UseLinkPropsOptions<
7575
TRouteTree extends AnyRoute = RegisteredRouter['routeTree'],
7676
TFrom extends RoutePaths<TRouteTree> | string = string,
77-
TTo extends string | undefined= undefined,
77+
TTo extends string = '',
7878
TMaskFrom extends RoutePaths<TRouteTree> | string = TFrom,
79-
TMaskTo extends string | undefined = undefined,
79+
TMaskTo extends string = '',
8080
> = ActiveLinkOptions<TRouteTree, TFrom, TTo, TMaskFrom, TMaskTo> &
8181
React.AnchorHTMLAttributes<HTMLAnchorElement>
8282

8383
export type LinkProps<
8484
TRouteTree extends AnyRoute = RegisteredRouter['routeTree'],
8585
TFrom extends RoutePaths<TRouteTree> | string = string,
86-
TTo extends string| undefined = undefined,
86+
TTo extends string = '',
8787
TMaskFrom extends RoutePaths<TRouteTree> | string = TFrom,
88-
TMaskTo extends string | undefined = undefined,
88+
TMaskTo extends string = '',
8989
> = ActiveLinkOptions<TRouteTree, TFrom, TTo, TMaskFrom, TMaskTo> &
9090
Omit<React.AnchorHTMLAttributes<HTMLAnchorElement>, 'children'> & {
9191
// If a function is passed as a child, it will be given the `isActive` boolean to aid in further styling on the element it returns
@@ -97,9 +97,9 @@ export type LinkProps<
9797
export type ActiveLinkOptions<
9898
TRouteTree extends AnyRoute = RegisteredRouter['routeTree'],
9999
TFrom extends RoutePaths<TRouteTree> | string = string,
100-
TTo extends string | undefined = undefined,
100+
TTo extends string = '',
101101
TMaskFrom extends RoutePaths<TRouteTree> | string = TFrom,
102-
TMaskTo extends string | undefined = undefined,
102+
TMaskTo extends string = '',
103103
> = LinkOptions<TRouteTree, TFrom, TTo, TMaskFrom, TMaskTo> & {
104104
// A function that returns additional props for the `active` state of this link. These props override other props passed to the link (`style`'s are merged, `className`'s are concatenated)
105105
activeProps?:

0 commit comments

Comments
 (0)