인프런 영문 브랜드 로고
인프런 영문 브랜드 로고

인프런 커뮤니티 질문&답변

범띵떵님의 프로필 이미지

작성한 질문수

한 입 크기로 잘라먹는 Next.js(v15)

9.3) 배포하기

vercel 배포시 빌드 오류문제

해결된 질문

작성

·

131

0

src/app/(with-searchbar)/search/page.tsx
Type error: Type 'Props' does not satisfy the constraint 'PageProps'.
  Types of property 'searchParams' are incompatible.
    Type '{ q?: string | undefined; }' is missing the following properties from type 'Promise<any>': then, catch, finally, [Symbol.toStringTag]

vercel 명령어 사용시 build문제에서 에러가 생겼다고 하면서 위와 같은 타입 에러가 나오네요 ㅠ

선생님께서 제공해주신 github에서 내용을 가져와 적용해보았으나 같은 에러가 나오게되어 질문드립니다.

답변 2

0

이정환 Winterlood님의 프로필 이미지
이정환 Winterlood
지식공유자

안녕하세요 이정환입니다.

오류 메세지를 읽어보시면 searchParams 라는 Props의 타입 정의가 잘못되었다고 나와 있습니다.

이런 오류가 발생하는 이유는 우리 강의의 3.2) 페이지 라우팅 설정하기 6분 21초 경에 설명드리고 있듯이 Next.js 15.1 버전부터는 searchParams와 params의 타입이 모두 Promise로 래핑되어 제공되기 때문입니다. (자세한 내용은 앞서 언급해드린 챕터를 참고하세요!) 이에 해당 내용을 참고하셔서 코드 상에 serachParams와 params의 타입을 모두 Promise로 변경하시면 되겠습니다!

PS. 제가 GitHub에 올려둔 코드는 Next.js 15.1 이전 버전으로 개발되어 있어서 그대로 다운로드 받아 빌드하실 경우 이런 오류가 발생하지는 않을텐데, src 폴더만 복사하시거나 혹은 Next.js의 버전을 업그레이드 하신 것 같습니다. GitHub 코드의 버전도 최대한 빠른 시일 내로 업데이트 하도록 하겠습니다!

0

인프런 AI 인턴님의 프로필 이미지

안녕하세요, 인프런 AI 인턴입니다. 범띵떵님.

Next.js 프로젝트를 Vercel에 배포하는 동안 발생한 타입 오류에 대해 설명드리겠습니다. 제공하신 에러 메시지에서는 searchParams의 타입 충돌이 문제의 원인으로 확인됩니다.

문제 원인 및 해결 방안

  1. 타입 스크립트 에러 해결하기:

    • 타입스크립트에서 Promise 타입과 단순 객체 타입의 호환성 문제로 인해 발생하는 오류입니다.
    • Next.js 13 이상의 버전에서 페이지 컴포넌트로 전달되는 searchParamsPromise로 타입이 지정되어 있습니다. 따라서 타입 정의를 명확히 해주어야 합니다.
  2. 페이지 컴포넌트의 searchParams 타입 정의 확인:

    • 페이지 컴포넌트가 있는 경우에는 searchParams를 올바르게 타입을 지정해야 합니다. 보통 다음과 같이 비동기 데이터를 다룰 때 Promise를 반환하는 것으로 처리해야 합니다.
   type PageProps = {
     searchParams: Promise<{ q?: string }>
   };
  1. 코드 수정 및 예외 처리:

    • 에러가 발생했던 코드에 추가적인 검증 로직을 추가하여 오류가 발생하지 않도록 해야 합니다.
    • 기존 코드를 확인해보고 searchParamsPromise에서 then을 사용한 후 객체로 반환되는지 확인해 주세요.
  2. Next.js 및 Vercel 환경 확인:

    • 만약 searchParams를 Promise처럼 사용하고 있다면 비동기 함수로 변경하고 await를 사용하여 적절하게 데이터를 받아오는지 확인해야 합니다.
    • local 환경과 Vercel 배포 환경에서의 환경 변수 설정이 맞는지 확인해 주세요.

아래는 비슷한 문제를 해결한 기존 답변 링크입니다:
- Type error: Type ‘{ searchParams: { q?: string | undefined; }; }’ does not satisfy the constraint ‘PageProps’

위의 해결 방법들이 오류를 해결하는데 도움이 되기를 바랍니다. 문제가 지속된다면 해당 코드를 포함한 프로젝트의 일부 구성을 다시 점검해 보시기를 추천드립니다.

저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다. 현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏 추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.