tsconfig.json で指定できる全 compilerOptions をまとめた (TypeScript v2.5 版)

TypeScript v2.5 時点で指定できる、tsconfig.jsoncompilerOptions をまとめた。主に Angular4 系で使っている tsconfig.json なので、React.js を使いたい場合などはコメントアウトしてあるオプションを使う必要があったりするかも。

// tsconfig.json : https://www.typescriptlang.org/docs/handbook/tsconfig-json.html
{
  // 保存時にビルドする (true)
  "buildOnSave": true,
  // 保存時にコンパイルする (true)
  "compileOnSave": false,
  // Compiler Options : https://www.typescriptlang.org/docs/handbook/compiler-options.html http://js.studio-kingdom.com/typescript/project_configuration/compiler_options
  "compilerOptions": {
    // ソース情報
    // --------------------------------------------------------------------------------
    
    // コンパイル対象のルートディレクトリ
    "baseUrl": "src",
    // キャラクタセット
    "charset": "utf8",
    // コンパイルに含めるライブラリの指定
    "lib": [
      "es2016",
      "dom"
    ],
    // モジュールのパス・マッピング : 指定しない
    // "paths": {},
    // 指定の設定ファイルでプロジェクトをコンパイルする : 指定しない
    // "project": "",
    // ルートディレクトリ指定 : 指定しない
    // "rootDir": "src",
    // ルートディレクトリ指定 : 指定しない
    // "rootDirs": [],
    // TypeScript ファイルを探す場所 : 指定しない
    // "sourceRoot": "",
    // 型定義ファイルのパス
    "typeRoots": [
      "node_modules/@types"
    ],
    // 含める型定義の名前の一覧 : 指定しない
    // "types": [],
    
    // コンパイル方法
    // --------------------------------------------------------------------------------
    
    // for of によるイテレーションをサポートさせない (false)
    "downlevelIteration": false,
    // ES7 の Decorator Metadata のサポートを有効にする (true) : Angular で DI を行うために必要
    "emitDecoratorMetadata": true,
    // ES7 の Decorators のサポートを有効化する (true)
    "experimentalDecorators": true,
    // tslib のヘルパーをインポートしない (false)
    "importHelpers": false,
    // JSX を使用する際のファクトリ関数
    // "jsx": "preserve",
    // モジュールの方式 : 指定しない
    // "module": "commonjs",
    // モジュールの名前解決の方法 : 指定しない
    // "moduleResolution": "node",
    // 生成コードの改行コードを指定する
    "newLine": "LF",
    // __extends のようなカスタムヘルパー関数を生成しない (false)
    "noEmitHelpers": false,
    // コンパイルエラーがあった場合はファイルを生成しない (true)
    "noEmitOnError": true,
    // const enum 宣言を宣言を残さない (false)
    "preserveConstEnums": false,
    // モジュールの解決やキャッシュでシンボリックリンクの場所を基準にしない (false)
    "preserveSymlinks": false,
    // 「/*!」で始まるコメント以外を除去する (true)
    "removeComments": true,
    
    // 生成物
    // --------------------------------------------------------------------------------
    
    // 対応する .d.ts ファイルを生成する (true)
    "declaration": true,
    // .d.ts ファイルの生成先ディレクトリの指定
    "declarationDir": "./typings",
    // BOM を付けない (false)
    "emitBOM": false,
    // 1つのソースマップファイルを出力するようにしない (false) : ファイルごとに個別にソースマップファイルを生成する
    "inlineSourceMap": false,
    // ソースを単一ファイルにして出力しない (false)
    "inlineSources": false,
    // モジュールごとに分けてトランスパイルしない (false)
    "isolatedModules": false,
    // マップファイルの場所を指定 : 使わない
    // "mapRoot": "",
    // 出力する (false)
    "noEmit": false,
    // 出力先ディレクトリの指定
    "outDir": "./dist",
    // 出力ファイル : 指定しない
    // "outFile": "",
    // ソースマップを生成する (true)
    "sourceMap": true,
    // 出力する ECMAScript のバージョンを指定する
    "target": "es5",
    
    // コンパイル時のチェッカ
    // --------------------------------------------------------------------------------
    
    // JavaScript ファイルを許容しない (false)
    "allowJs": false,
    // default export なしでの default import を許容しない (false) : 指定しないでおく
    // "allowSyntheticDefaultImports": false,
    // 到達しえないコードを許容しない (false)
    "allowUnreachableCode": false,
    // 到達しえないラベルを許容しない (false)
    "allowUnusedLabels": false,
    // use strict を自動付与する (true)
    "alwaysStrict": true,
    // JavaScript ファイルの型整合性などをチェックする (true)
    "checkJs": true,
    // 大文字小文字を区別して参照を解決するようする (true) : Windows 向け
    "forceConsistentCasingInFileNames": true,
    // switch 文のフォールスルーに対してエラーを報告しない (false)
    "noFallthroughCasesInSwitch": false,
    // 暗黙的な any をエラーにしない (false) : 一部パッケージの Import ができない場合があるため無効化
    "noImplicitAny": false,
    // 暗黙的に undefined を返している関数をエラーにする (true)
    "noImplicitReturns": true,
    // this に型を明示しないとエラーにする (true)
    "noImplicitThis": true,
    // use strict を付ける (false)
    "noImplicitUseStrict": false,
    // ライブラリファイルをインクルードする (false)
    "noLib": false,
    // 3連スラッシュの参照や import 対象のモジュールを追加する (false)
    "noResolve": false,
    // Generics の型の互換性チェックをしない (true) : 破壊的変更であるため有効化するかは要チェック
    "noStrictGenericChecks": true,
    // 使っていないローカル変数をエラーにする (true)
    "noUnusedLocals": true,
    // 使っていない仮引数をエラーにする (true) : ただし引数名の先頭にアンダースコアを付けると回避できる
    "noUnusedParameters": true,
    // デフォルトライブラリの型宣言ファイルの型チェックをスキップしない (false)
    "skipDefaultLibCheck": false,
    // 全てのライブラリの型宣言ファイルの型チェックをスキップしない (false)
    "skipLibCheck": false,
    // noImplicitAny・noImplicitThis・alwaysStrict・strictNullChecks を true にしない (false)
    "strict": false,
    // 全ての型で Null を許容しないようにする設定を無効化する (false) : true にするとコンパイルが通らなくなる場合があるため false に設定する
    "strictNullChecks": false,
    // @internal JSDoc アノテーションがある場合に宣言を出力する (false)
    "stripInternal": false,
    // オブジェクトへの過剰なプロパティチェックを抑制しない (false)
    "suppressExcessPropertyErrors": false,
    // インデックスシグネチャが欠損したオブジェクトの noImplicitAny エラーを抑制しない (false)
    "suppressImplicitAnyIndexErrors": false,
    
    // その他
    // --------------------------------------------------------------------------------
    
    // 診断情報を表示しない (false)
    "diagnostics": false,
    // JavaScript のプロジェクトのサイズ制限を無効にしない (false)
    "disableSizeLimit": false,
    // 生成ファイル名を出力しない (false)
    "listEmittedFiles": false,
    // コンパイルしたファイル名を出力しない (false)
    "listFiles": false,
    // エラーメッセージの表示に使用されるロケール
    "locale": "en-US",
    // allowJs を指定時、node_modules 配下の JS ファイルを読み込む依存の最大深度を指定する
    "maxNodeModuleJsDepth": 0,
    // エラーとメッセージの色装飾をしない (false)
    "pretty": false,
    // モジュール解決のログメッセージを出力しない (false)
    "traceResolution": false,
    // 監視モードにしない (false)
    "watch": false
  },
  // 対象ファイル : ココで指定しない
  // "include": [],
  // 除外ファイル
  "exclude": [
    "node_modules"
  ],
  // ngc による AoT コンパイル用のオプション : https://qiita.com/Quramy/items/a603ddb47d6e4b3497e1
  "angularCompilerOptions": {
    "outDir": "./dist",
    "strictMetadataEmit": false,
    "skipTemplateCodegen": true
  }
}