Fix(typedRoutes): fixed StaticRoutes and DynamicRoutes being empty causing invalid syntax (#46620)

When `dynamicRouteTypes`/`staticRouteTypes` is empty, an invalid `link.d.ts` is generated. This just handles that case.

## Bug

- [ ] Related issues linked using `fixes #number`
- [ ] Integration tests added
- [ ] Errors have a helpful link attached, see [`contributing.md`](https://github.com/vercel/next.js/blob/canary/contributing.md)

## Feature

- [ ] Implements an existing feature request or RFC. Make sure the feature request has been accepted for implementation before opening a PR.
- [ ] Related issues linked using `fixes #number`
- [ ] [e2e](https://github.com/vercel/next.js/blob/canary/contributing/core/testing.md#writing-tests-for-nextjs) tests added
- [ ] Documentation added
- [ ] Telemetry added. In case of a feature if it's used or not.
- [ ] Errors have a helpful link attached, see [`contributing.md`](https://github.com/vercel/next.js/blob/canary/contributing.md)

## Documentation / Examples

- [ ] Make sure the linting passes by running `pnpm build && pnpm lint`
- [ ] The "examples guidelines" are followed from [our contributing doc](https://github.com/vercel/next.js/blob/canary/contributing/examples/adding-examples.md)
This commit is contained in:
Ngô Đức Anh 2023-03-01 23:41:36 +07:00 committed by GitHub
parent 844776ef95
commit fcfab17282
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23

View file

@ -196,7 +196,6 @@ function createRouteDefinitions(
}
}
const fallback = !edgeRoutes.length && !nodeRoutes.length ? 'string' : ''
const routes = [...edgeRoutes, ...nodeRoutes, ...extraRoutes]
// By exposing the static route types separately as string literals,
@ -267,10 +266,12 @@ declare namespace __next_route_internal_types__ {
type OptionalCatchAllSlug<S extends string> =
S extends \`\${string}\${SearchOrHash}\` ? never : S
type StaticRoutes = ${staticRouteTypes}
type DynamicRoutes<T extends string = string> = ${dynamicRouteTypes}
type StaticRoutes = ${staticRouteTypes || 'string'}
type DynamicRoutes<T extends string = string> = ${
dynamicRouteTypes || 'string'
}
type RouteImpl<T> = ${fallback}
type RouteImpl<T> =
| StaticRoutes
| \`\${StaticRoutes}\${Suffix}\`
| (T extends \`\${DynamicRoutes<infer _>}\${Suffix}\` ? T : never)