tsconfig.json

概要

tsconfig.jsonが存在するディレクトリは、そのディレクトリがTypeScriptプロジェクトのルート・フォルダであることを示します。 tsconfig.jsonファイルにはルート・ファイルと、プロジェクトをコンパイルするのに必要なコンパイラのオプションを指定します。 プロジェクトは下記のいずれかの方法でコンパイルします。

tsconfig.jsonの使用

  • 入力ファイルを指定せずにtscを実行します。 この場合、コンパイラはtsconfig.jsonファイルを現在のディレクトリから開始して、 親ディレクトリへと遡り続けてtsconfig.jsonファイルを探します。
  • 入力ファイルを指定せずに、--project(または、-pのみ)のコマンドラインのオプションで、 tsconfig.jsonファイルが含まれるディレクトリのパスを指定してtscを実行します。

コマンドライン上で入力ファイルが指定された場合は、tsconfig.jsonファイルは無視されます。

tsconfig.jsonファイルの例

  • "files"プロパティを使用

    {
        "compilerOptions": {
            "module": "commonjs",
            "noImplicitAny": true,
            "removeComments": true,
            "preserveConstEnums": true,
            "sourceMap": true
        },
        "files": [
            "core.ts",
            "sys.ts",
            "types.ts",
            "scanner.ts",
            "parser.ts",
            "utilities.ts",
            "binder.ts",
            "checker.ts",
            "emitter.ts",
            "program.ts",
            "commandLineParser.ts",
            "tsc.ts",
            "diagnosticInformationMap.generated.ts"
        ]
    }
    
  • "include""exclude"プロパティを使用

    {
        "compilerOptions": {
            "module": "system",
            "noImplicitAny": true,
            "removeComments": true,
            "preserveConstEnums": true,
            "outFile": "../../built/local/tsc.js",
            "sourceMap": true
        },
        "include": [
            "src/**/*"
        ],
        "exclude": [
            "node_modules",
            "**/*.spec.ts"
        ]
    }
    

詳細

"compilerOptions"プロパティは省略可能であり、その場合はコンパイラのデフォルト値が使用されます。 サポートされる全てのコンパイラ・オプションの一覧を参照してください。

"files"プロパティには、相対ファイルパスまたは絶対ファイルパスの一覧を指定します。 "include""exclude"にはglob風のファイルパターンの一覧を指定します。 サポートされるglobのワイルドカードは下記のとおりです。

  • *は0文字以上の文字にマッチ(ディレクトリ区切りを除く)
  • ?は1文字以上の文字にマッチ(ディレクトリ区切りを除く)
  • **/はサブディレクトリに再帰的にマッチ

globパターンの部分が*または.*のみを含む場合、サポート対象の拡張子のファイルのみが含まれます。 (例: デフォルトでは、ts.tsx.d.tsであり、alloJsがtrueの場合は.js.jsxが含まれます)

"files""include"のどちらも明示的に指定されていない場合、 デフォルトでコンパイラは"exclude"プロパティで指定されたものを除くディレクトリとサブディレクトリ内の、 全てのTypeScriptファイル(.ts.d.ts.tsx)を含めます。

allowJsがtrueに設定されている場合は、JSファイル(.jsおよび.jsx)も含まれます。 "files"または"include"プロパティが指定されている場合は、 コンパイラはその2つのプロパティに含まれるファイルの和集合を代わりにインクルードします。

コンパイラ・オプションの"outDir"で指定されたディレクトリ内のファイルは、 "files"プロパティで明示的に含めるように指定されない限り、常に除外されます。("exclude"プロパティが指定されていたとしても)

"include"を使用して含まれるファイルは、"exclude"プロパティを使用してフィルタリングされますが、 "files"プロパティを使用して明示的に指定されたファイルは、"exclude"に関係なく常に含まれます。

"exclude"プロパティが指定されない場合は、 デフォルトでnode_modulesbower_componentsjspm_packages<outDir>が除外されます。

"files"または"include"に指定されたファイルによって参照されるファイルも含まれます。 同様に、ファイルB.tsが別のファイルA.tsに参照される場合、 A.ts"exclude"の一覧に指定されない限り、B.tsを除外することはできません。

tsconfig.jsonファイルを完全に空にしても問題ありません。 この場合、デフォルトのコンパイラオプション(前述したように)によって含まれる全てのファイルをコンパイルします。

コマンドラインで指定されたコンパイラ・オプションは、tsconfig.jsonファイルで指定されたオプションを上書きします。

@types、typeRoots、types

デフォルトで、対象範囲の全ての"@types"パッケージがコンパイルに含まれます。 node_modules/@typesのパッケージが対象範囲とみなされます。 具体的には、 ./node_modules/@types/../node_modules/@types/../../node_modules/@types/といったフォルダ内に含まれるパッケージになります。

typesRootsが指定されている場合は、それに含まれるパッケージのみが対象となります。 下記はその一例になります。

{
   "compilerOptions": {
       "typeRoots" : ["./typings"]
   }
}

この設定ファイルには./typings下のすべてのパッケージが含まれ、./node_modules/@typesのパッケージは含まれません。

typesが指定された場合、一覧に指定されたパッケージのみが含まれます。

{
   "compilerOptions": {
       "types" : ["node", "lodash", "express"]
   }
}

このファイルでは、 ./node_modules/@types/node./node_modules/@types/lodash./node_modules/@types/expressのみが含まれます。 その他のパッケージのnode_modules/@types/*は含まれません。

"types": []を指定すると、@typesパッケージによって自動インクルードされることを無効にします。

自動インクルードは、グローバル宣言のあるファイル(モジュールとして宣言されたファイルではなく)を使用している場合にのみ重要になることに注意してください。 例えば、import "foo"の構文を使用する場合、 TypeScriptは依然としてfooパッケージを見つけるためにnode_modulesnode_modules/@typesを探す可能性があります。

extendsによる設定の継承

tsconfig.jsonファイルは、extendsプロパティを使用して他のファイルから設定を継承することが可能です。

extendsは、tsconfig.jsonの最上位のプロパティです。 (compilerOptionsfilesincludeexcludeと同じく) extendsの値は継承元となる別の設定ファイルへのパスを含む文字列になります。

まず、ベースとなるファイルの設定が読み込まれ、次に継承する設定がそれらに上書きされます。 もし循環する項目があれば、エラーが報告されます。

継承するファイルのfilesincludeexcludeが、ベースとなるファイルの設定を上書きします。

設定ファイルにある全ての相対パスは、それらが作られた設定ファイルに関連して解決されます。

下記は設定の継承例になります。

configs/base.json
{
  "compilerOptions": {
    "noImplicitAny": true,
    "strictNullChecks": true
  }
}
tsconfig.json
{
  "extends": "./configs/base",
  "files": [
    "main.ts",
    "supplemental.ts"
  ]
}
tsconfig.nostrictnull.json
{
  "extends": "./tsconfig",
  "compilerOptions": {
    "strictNullChecks": false
  }
}

compileOnSave

再上層プロパティのcompileOnSaveを設定すると、 tsconfig.jsonの保存時にIDEに全てのファイルを生成するように合図を出します。

{
   "compileOnSave": true,
   "compilerOptions": {
       "noImplicitAny" : true
   }
}

この機能は現在TypeScript 1.8.4のVisual Studio 2015とそれ以降のバージョン、 atom-typescriptプラグインでサポートされています。

スキーマ

スキーマはhttp://json.schemastore.org/tsconfigで見つけることが出来ます。

 Back to top

© https://github.com/Microsoft/TypeScript-Handbook

このページは、ページトップのリンク先のTypeScript-Handbook内のページを翻訳した内容を基に構成されています。 下記の項目を確認し、必要に応じて公式のドキュメントをご確認ください。 もし、誤訳などの間違いを見つけましたら、 @tomofまで教えていただければ幸いです。

  • ドキュメントの情報が古い可能性があります。
  • "訳注:"などの断わりを入れた上で、日本人向けの情報やより分かり易くするための追記を行っている事があります。