[TypeScript] VSCodeのバージョンを上げたらjestのテストでエラーが出た!

[TypeScript] VSCodeのバージョンを上げたらjestのテストでエラーが出た!

VSCode のバージョンアップをすると jest が真っ赤になりました。原因と対策を調べました。
2026.04.06

はじめに

TypeScript のメジャーバージョンが上がりました。主な変更内容は以下です。

https://www.typescriptlang.org/docs/handbook/release-notes/typescript-6-0.html

合わせて、VSCode が TypeScript プロジェクトの解析に用いる TypeScript バージョンも 6.x.x に更新されています。

https://code.visualstudio.com/updates/v1_114#_typescript-60

これにより、表題のようにエラーが出るようになったため、原因と解決策をまとめてみました。

対象としている人

  • VSCodeを使っている
  • TypeScriptで開発している
  • TypeScriptのメジャーバージョンを上げていない (v5.x.x を使っている)
  • 設定でワークスペースのTypeScriptバージョンを使うようにしていない (後述)
  • tsconfig.jsonでtypesを明示していない
  • jestをグローバルスコープから呼んでいる (importしていない)

起きていること

2026/04/01 にリリースされた VSCode 1.114 に更新すると、testファイルが真っ赤に染まります。

スクリーンショット 2026-04-06 12.54.01

エラーの内容としては、

名前 'describe' が見つかりません。テスト ランナーの型定義をインストールする必要がありますか? `npm i --save-dev @types/jest` または `npm i --save-dev @types/mocha` を試してから、tsconfig の型フィールドに 'jest' または 'mocha' を追加してください。

(英語版)

Cannot find name 'describe'. Do you need to install type definitions for a test runner? Try `npm i --save-dev @types/jest` or `npm i --save-dev @types/mocha` and then add 'jest' or 'mocha' to the types field in your tsconfig.

などとなります。今まで普通に動いてたのに、真っ赤になるとびびります。

原因

冒頭のTypeScript v6 のリリースノートを見ると、

types now defaults to []

https://www.typescriptlang.org/docs/handbook/release-notes/typescript-6-0.html#types-now-defaults-to-

とあります。今まで、tsconfig.json に types の記載がない場合、デフォルト動作は

{
  types: [node_modules/@types/*]
}

のようになっていました。これが、v6からはデフォルトが

{
  types: []
}

となります。jestはグローバルスコープからimportなしで呼ぶ人が多いかと思いますが、typesからjestが消えたことにより、本記事のエラーが出ている、という状況です。

types の設定についてはこちら

https://www.typescriptlang.org/tsconfig/#types

TypeScript側の狙いとしては、大量のパッケージがグローバルスコープに含まれることによるコンパイルコストの無駄を削減したいということみたいです。

In a sense, the types value previously defaulted to “enumerate everything in node_modules/@types”. This can be very expensive, as a normal repository setup these days might transitively pull in hundreds of @types packages, especially in multi-project workspaces with flattened node_modules. Modern projects almost always need only @types/node, @types/jest, or a handful of other common global-affecting packages.

(翻訳)

ある意味では、以前は types の値はデフォルトで「node_modules/@types 内のすべてを列挙する」ようになっていました。これは非常に負荷が高い可能性があります。なぜなら、最近の一般的なリポジトリ構成では、特に node_modules がフラット化されたマルチプロジェクトワークスペースにおいて、間接的に何百もの @types パッケージが引き込まれることがあるからです。現代のプロジェクトでは、ほとんどの場合、@types/node や @types/jest、あるいはその他の一般的なグローバルに影響を与えるパッケージが数個あれば十分です。

対策

対策は明確ですが、複数あります。

1. VSCodeが解析に用いるTypeScriptをワークスペースのものにする

おそらく最もインパクトの小さい対策です。本記事の問題は "VSCode でテストファイルが真っ赤に染まる" ですので、これを鎮静化します。

[for Mac]
Cmd + Shift + P > TypeScript: Select TypeScript Version... > Use Workspace Version

[other]
Ctrl + Shift + P > TypeScript: Select TypeScript Version... > Use Workspace Version

これだけです。人によっては、以下の設定も合わせて必要かもしれません。(デフォルトのパスは自動で探すので、心当たりなければ不要なはずです)

https://code.visualstudio.com/docs/typescript/typescript-transpiling#_using-the-workspace-version-of-typescript

2. jest を types で明示する (微妙?)

VSCode のエラーに出ている通り、tsconfig.json の types で明示してあげる方法です。もちろん解消はできますが、TypeScript v5 系では、types 未指定時に全 @types を暗黙で含めるデフォルト動作だったものを VSCodeの都合で変更するわけですから、スマートじゃない気もします。場合によっては他のパッケージの明示漏れでプロダクションビルドに影響が出るリスクもあります。

3. TypeScript を v6 系にバージョンアップする

これも2と同様、VSCode のためにバージョンアップするなら微妙だと思います。他の都合と合わせて、バージョンアップした方がよければそれが一番綺麗ではあると思います。この場合は tsconfig.json の types で明示してあげるようにする変更が合わせて必要です。

4. jest などを import して使うようにする (微妙?)

グローバルスコープから呼ばなければそもそも無関係です。都度 import すればエラーは出ません。が、これも jest ならまだしも、グローバル型に依存しているパッケージがプロダクションコードにも複数あると、全て明示的な import に切り替える必要があります。対応漏れがあるとビルドが壊れるリスクがあるので、個人的には微妙な選択肢だと思います。

最後に

僕は1番の方法で鎮静化しました。この方法だと、各開発者が各々設定する必要があり、ぼちぼち混乱を招く気もしています。

この記事をシェアする

関連記事