Skip to content

Commit

Permalink
Improve type checking error message for invalid props (#43903)
Browse files Browse the repository at this point in the history
Previously when you have wrong props for a page or layout:

<img width="639" alt="CleanShot 2022-12-09 at 20 27 25@2x"
src="https://user-images.githubusercontent.com/3676859/206782176-a91ec178-a7b7-4e17-b990-a0fe90402ebf.png">

With this PR:

<img width="643" alt="CleanShot 2022-12-09 at 20 27 30@2x"
src="https://user-images.githubusercontent.com/3676859/206782204-4623c830-86e9-4b95-abc9-b0819475a74b.png">

Next step is to generate prop types for named slots.

## 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)

Co-authored-by: kodiakhq[bot] <49736102+kodiakhq[bot]@users.noreply.github.com>
  • Loading branch information
shuding and kodiakhq[bot] committed Dec 9, 2022
1 parent d8545e6 commit 582070e
Showing 1 changed file with 19 additions and 4 deletions.
23 changes: 19 additions & 4 deletions packages/next/lib/typescript/diagnosticFormatter.ts
Expand Up @@ -62,10 +62,11 @@ function getFormattedLayoutAndPageDiagnosticMessageText(
if (types) {
main += '\n' + ' '.repeat(indent * 2)

if (types[2] === 'PageComponent') {
main += `The exported page component isn't correctly typed.`
} else if (types[2] === 'LayoutComponent') {
main += `The exported layout component isn't correctly typed.`
if (
types[2] === 'PageComponent' ||
types[2] === 'LayoutComponent'
) {
main += `The exported ${type} component isn't correctly typed.`
} else {
main += `Expected "${chalk.bold(
types[2].replace(
Expand All @@ -80,6 +81,20 @@ function getFormattedLayoutAndPageDiagnosticMessageText(
main += '\n' + ' '.repeat(indent * 2)
main += `Invalid configuration:`
break
case 2739:
const invalidProp = item.messageText.match(
/Type '(.+)' is missing the following properties from type '(.+)'/
)
if (invalidProp) {
if (
invalidProp[1] === 'LayoutProps' ||
invalidProp[1] === 'PageProps'
) {
main += '\n' + ' '.repeat(indent * 2)
main += `Prop "${invalidProp[2]}" is incompatible with the ${type}.`
}
}
break
case 2559:
const invalid = item.messageText.match(/Type '(.+)' has/)
if (invalid) {
Expand Down

0 comments on commit 582070e

Please sign in to comment.