$ ryokkkke.com/TypeScript/tsconfig.json

rootDir

概要

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

{
  "rootDir": "./src"
}

コンパイル結果をoutDirで出力する際に、どのディレクトリ配下のディレクトリ構造で出力するかを指定します。
filesincludeとは違い、コンパイル対象を決めるオプションではありません。

逆に、コンパイル対象となるファイルは全てrootDirで指定するディレクトリ配下に存在する必要があります。

詳細

例えば下記のディレクトリ構造で、rootDir./srcにしたとします。

.
├── index.ts
├── package-lock.json
├── package.json
├── src
│   ├── hoge.ts
│   └── piyo
│       ├── foo
│       │   └── foo.ts
│       └── piyo.ts
└── tsconfig.json
{
  "outDir": "./dist",
  "rootDir": "./src"
}

filesincludeを指定していないので、コンパイル対象はtsconfig.jsonの存在するディレクトリ配下の全ての.ts.tsxファイルとなります。
この状態でコンパイルを実行すると、コンパイル対象がrootDirで指定したディレクトリ外に存在するため、以下のようにエラーが出ます。

error TS6059: File '/path/to/index.ts' is not under 'rootDir' '/path/to/src'. 'rootDir' is expected to contain all source files.

これは、ルートディレクトリに存在するindex.tsがコンパイル対象にも関わらずrootDirで指定しているディレクトリ./src配下に存在しないからです。

includeでコンパイル対象を./src/**/*にすれば、rootDirに全てのコンパイル対象が含まれるためコンパイルが通ります。

{
  "include": ["src/**/*"],
  "compilerOptions": {
    "outDir": "./dist",
    "rootDir": "./src"
  }
}

コンパイル結果は下記のようになります。
./distのみ記載)

dist/
├── hoge.js
└── piyo
    ├── foo
    │   └── foo.js
    └── piyo.js

この出力結果は、rootDirで指定している./src配下と同じディレクトリ構成になります。


関連オプション:filesincludeoutDir