Help us understand the problem. What is going on with this article?

[TypeScript] error TS6059: File is not under 'rootDir'. の対処法

表題のエラーに関して、詰まりましたのでメモを残しておきます。

症状

error TS6059: File '.ts' is not under 'rootDir' '**'. 'rootDir' is expected to contain all source files.

TypeScriptのtscコマンド実行時に、上記のエラーが発生します。

環境

"typescript": "^3.6.2"

症状が発生するミニマムな設定は以下の通りです。

tsconfig.json
{
  "compilerOptions": {
    "outDir": "./output",
    "rootDir": "./source"
  },
}

この環境で、./sourceディレクトリ以外の場所に.tsという拡張子を持つファイルが存在すると表題のエラーが発生します。
この.tsファイルは必ずしもTypeScriptファイルである必要はなく、ファイル名に含まれているだけでエラーが発生します。jestのテスト用ファイルや動画ファイルの拡張子にも反応します。

原因

この症状は、tscコマンドが実行されたディレクトリ以下の全てのファイルを検索するために発生します。
rootDirオプションはtscコマンドのファイル検索範囲を制限しません。
このオプションはoutDirにファイルを出力する際、ディレクトリ構成を維持するためだけに使用されます。
参考リンク

直感的にはrootDirという設定があれば、そのほかのファイルはすべて無視するような気がしますが、tscコマンドはそのようには振る舞いません。

対策

解決策として、tsconfig.jsonにrootDirincludeの両方のオプションを設定します。
https://github.com/microsoft/TypeScript/issues/9858#issuecomment-370443762

tsconfig.json
{
  "compilerOptions": {
    "outDir": "./output",
    "rootDir": "./source",
                 ^^^^^^^
  },
  "include": ["source"]
               ^^^^^^^
}

includeを使用することで、明示的に検索対象ディレクトリをtscコマンドに教えられます。
この設定により、includeディレクトリ以外のファイルは無視されるようになります。

以上、ありがとうございました。

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away