Vercel 배포중 아래와 같은 에러를 만났다. 로그를 보니 react-markdown
에서 문제가 발생한 건 알 수 있었다.
./node_modules/@uiw/react-markdown-preview/node_modules/react-markdown/lib/complex-types.ts:25:21
Type error: Cannot find namespace 'JSX'a
구글링을 통해 관련된 GitHub 이슈를 찾아볼 수 있었다.
답변들을 보니 JSX
를 React.JSX
로 바꿔야 한다는 내용이 많았다❗️
React 19와 최신 TypeScript에서는 JSX
네임스페이스를 더이상 전역으로 제공해 주지 않고 대신 React.JSX
를 사용해야 한다.
그러나 일부 라이브러리에서는 여전히 전역 JSX
를 참조하고 있어서 문제가 발생한 것이다.
1. 라이브러리 업데이트
관련 라이브러리들을 최신 버전으로 업데이트 하자.
npm install react-markdown@latest @uiw/react-markdown-preview@latest
react-markdown-preview
와 그 내부 react-markdown
을 React 19 호환 버전(전역 JSX 참조를 없앤 버전)으로 업데이트2. 글로벌 타입 선언 추가
계속해서 에러가 발생한다면,프로젝트 루트에 global.d.ts
파일을 생성하고 아래 내용을 추가하기
// ./global.d.ts
import React from "react";
declare global {
namespace JSX {
// React 18+의 JSX.Element
type Element = React.ReactElement;
// 모든 태그 이름을 any로 허용
interface IntrinsicElements {
[elemName: string]: any;
}
}
}
이렇게 하면, 전역 JSX
네임스페이스를 임시로 복원할 수 있다.
나는 라이브러리 업데이트와 글로벌 타입 선언을 모두 적용했다. 그 결과 에러가 사라졌지만, 아마 라이브러리 업데이트가 근본적인 해결책인 거 같다!