Skip to content
md
# 「ReactNode」型への「Element」代入不可エラーの解決方法

## 問題概要
ReactとTypeScriptを組み合わせたViteプロジェクトで、以下の型エラーが発生する場合があります:
```ts
Type 'Element' is not assignable to type 'ReactNode'.
Type 'Element' is not assignable to type 'ReactPortal'.

このエラーは主に:

  • Viteを使用したReact+TypeScriptプロジェクトで発生
  • コード実行時には問題なく動作するが、IDE上でエラーが表示される
  • 以前正常だった既存プロジェクトでも突然発生する可能性がある
<warning> **重要な注意点** このエラーはTypeScriptの型チェック上の問題で、実際のランタイム動作には影響しません。ただし放置すると将来の互換性問題を引き起こす可能性があります。 </warning>

効果的な解決策

方法1: @types/react のバージョンアップ (推奨)

最も確実な解決策は@types/reactを更新することです:

  1. パッケージの更新:
bash
npm install @types/react@latest @types/react-dom@latest --save-dev
# または
yarn add -D @types/react@latest @types/react-dom@latest
  1. package.json の確認:
json
"devDependencies": {
  "@types/react": "^18.2.25", // 18.2.25 以降を推奨
  "@types/react-dom": "^18.2.25"
}
  1. 再インストール後、開発サーバーの再起動

方法2: tsconfig.json の設定修正

json
{
  "compilerOptions": {
    "moduleResolution": "Bundler", // 重要な設定
    "lib": ["dom", "es2022", "dom.iterable"], // 'dom' が必須
    "module": "es2022",
    // その他の設定...
  }
}

方法3: TypeScriptキャッシュのクリア

Visual Studio Codeのキャッシュが原因の場合:

  1. F1 > Developer: Reload Window を実行
  2. VS Codeを完全再起動
  3. プロジェクトのnode_modulesdistフォルダを削除して再インストール

その他の確認事項

よくある要因と対処法

json
// 依存関係の不整合解消
"overrides": {
  "@types/react": "18.2.25" // Reactバージョンに合わせる
}
bash
npm install --legacy-peer-deps

環境別対策

<tip> #### Next.js ユーザーへ Next.jsアップグレード時に発生した場合は、明示的に`@types/react`を更新してください: ```bash yarn upgrade @types/react@latest @types/react-dom@latest -D ``` </tip>

設定トラブルシューティング

  1. 古い@types/reactの残留確認:
bash
npm rm @types/react @types/react-dom
npm install @types/react@latest @types/react-dom@latest --save-dev
  1. prop-types の衝突:
bash
npm install @types/prop-types@15.7.7 --save-dev

根本原因と予防策

主な原因

  • TypeScript と React の型定義間の非互換性
  • @types/react バージョンが古い
  • moduleResolution 設定の不備
  • DOM 型定義 (lib: ["dom"]) の欠落

予防的な対策

  1. 主要パッケージのバージョン固定:
json
"@types/react": "18.2.25",
"@types/react-dom": "18.2.25"
  1. 定期的な依存関係の更新:
bash
npm outdated # チェック
npm update --save-dev
  1. tsconfig.json 設定の標準化(Vite推奨設定を参照)
<warning> `"strict": false` 設定でエラー解消できますが、型安全性が低下します。本質的な解決にはなりません。 </warning> ```