Typescriptのコンパイラとは?(Typescriptを学んでいこう #2)

Typescriptのコンパイラとは?(Typescriptを学んでいこう #2)

第2回はTypescriptのコンパイラについて学んでいきます。

コンパイルするときのコマンド

ウォッチングモードにしておくと、いちいちコマンドを叩かなかくても、自動でコンパイルしてくれます。

tsc -w

また、コンパイルしたいプロジェクトをファイルごとではなく全体で指定したい場合は、下記コマンドを該当プロジェクトで実行する。

tsc --init

コンパイラの設定ファイル

Typescriptのコンパイルの設定は、ts.config に記載されています。

ここではts.config にどんな設定があるかを確認していきます。

exclude

コンパイルしたくないファイルやディレクトリを指定します。

excludeを設定する場合は、不要なコンパイルを避けるため、node_modulues を必ず入れます。

excludeを設定しない場合(空配列ではなく、exclude というキーをそもそも書かない場合)は、デフォルトでnode_modules がコンパイルから外れるため、わざわざ設定しなくても大丈夫です。

  "exclude": [
    "node_modules", 
    "Type"
  ],

include

excludeの反対で、コンパイルしたいファイルやディレクトリを指定します。

"*.dev.ts" のようにワイルドカードを指定できたり、ディレクトリを指定した場合は再帰的に全てのファイルをコンパイルしてくれたりします。

また、includeとexcludeの両方を設定した場合は、includeが先に読み込まれ、excludeが後から読み込まれます。

そのため、includeでディレクトリを指定し、そのディレクトリからコンパイルしたくないものをexcludeで指定する、という運用が一般的です。

  "include": [
    "app.ts",
    "analytic.ts"
  ],

files

コンパイルするファイルを指定することができます。

ワイルドカードは使用できません。

excludeで指定されたものも、問答無用で対象になるため、exclude、include、filesでは、filesが最も強いです。

  "files": [
    "app.ts"
  ]

compilerOptions

コンパイルのオプションが設定されています。

かなりの数の設定があるため、主要なものだけ確認していきます。

target

コンパイルした後のJavascriptのバージョンを指定します。

"compilerOptions": {
    /* Language and Environment */
    "target": "ES2016",
}

lib

参照するライブラリを指定する項目です。

独自のライブラリやTypeScript の標準ライブラリ以外のライブラリを参照したい場合に使用します。

設定する場合は、Typescriptの標準ライブラリ(ES2016など)も併せて指定しないと、エラーになります。

    "lib": [
      "DOM",
      "ES2016",
      "DOM.Iterable",
      "ScriptHost"
    ], 

allowJs

TypeScriptコンパイラにJavaScriptファイルをコンパイル対象として含めるかどうかを指定します。

"allowJs": true, 

checkJs

JavaScriptファイル内の型チェックを有効にするかどうかを制御します。

"checkJs": true,

sourceMap

TypeScriptコンパイラにソースマップファイルを生成させるかどうかを制御します。

trueにするとTypescriptとJavascriptの対応表(ソースマップ)が作成され、ブラウザのデバッグ時にJavascriptではなくTypescriptでデバッグができるようになります。

"sourceMap": true,

outDir

コンパイルをした後のファイルの出力場所を指定します。

distディレクトリを用意しておき、そこに全てのコンパイル後のファイルを出力するなどができます。

"outDir": "./dist", 

rootDir

コンパイラがどのディレクトリ以下を対象にコンパイルするかを制御します。

srcディレクトリを用意しておき、その配下のファイルをすべてコンパイルしたい場合などに役立ちます。

"rootDir": "./src",

removeComments

コンパイル後のファイルにコメントを含めるか含めないかを制御します。

trueにすると、コメントを除いたソースがコンパイルされます。

"removeComments": true,

noEmit

Javascriptファイルを実際には出力しないという制御をします。

Typescriptの型チェックだけを行いたい場合に使用します。

"noEmit": true,

downlevelIteration

古いバージョンのJavaScriptエンジンに対するイテレーション(反復)の動作を制御します。

具体的には、for...of ループを含むコードをコンパイルする際の動作を指定します。

true に設定すると、TypeScriptコンパイラは for...of ループを、古いバージョンのJavaScriptエンジンでも正しく動作するようにトランスパイルします。

エンジンがES6のイテレータープロトコルをサポートしていない場合に使用される設定です。

"downlevelIteration": true,

noEmitOnError

Typescriptファイルになんらかのエラーがあった場合、Javascriptファイルを生成するかどうかを制御します。

noEmitOnError の項目がそもそもない場合は、デフォルトでfalseになっており、これはTypescirptファイルにエラーがあっても、Javascriptファイルを生成することを意味します。

trueの場合、いずれかのTypescriptファイルにエラーがあった場合、全てのファイルに対して、Javascriptファイルを生成しません。

"noEmitOnError": true,

strict

厳格な型チェックを行うかどうかを制御します。

noImplicitAny ~ alwaysStrict の設定で、型チェックの細かい個別の設定をすることができます。

strictがtrueの場合、厳格な型チェックを行い、細かい個別の設定が全てtrueの場合と同義です。

"strict": true,

対象:

    "noImplicitAny": true,
    "strictNullChecks": true,
    "strictFunctionTypes": true,
    "strictBindCallApply": true,
    "strictPropertyInitialization": true,
    "noImplicitThis": true,
    "useUnknownInCatchVariables": true,
    "alwaysStrict": true,

noImplicitAny

any型を許容するかどうかの設定をします。

関数のパラメータに型が指定されていない場合、通常はany型が型推論されエラーになりますが、noImplicitAnyがfalseの場合は、エラーになりません。

ちなみに変数の場合は、最初に型が定義されていなくても代入される値で、型推論できるためany型が型推論されることはありません。

"noImplicitAny": true,

strictNullChecks

null, undefined が入る可能性のある値の制御をします。

デフォルトはtrueで、trueの場合、null, undefined が入る可能性があるとエラーを出します。

falseにすると、null, undefined が入る可能性があっても、エラーを出しません。

"strictNullChecks": true

strictBindCallApply

bind, call, apply メソッドを使用する場合、引数の数や型が関数と一致しない場合、型エラーが発生します。

falseにするとエラーが発生しません。

"strictBindCallApply": true,

noUnusedLocals

trueにすると使っていないローカル変数に対して、エラーを出します。

"noUnusedLocals": true,

noUnusedParameters

trueにすると、関数の引数のうち、呼び出した時に使われていない引数があるとエラーを出します。

“noUnusedParameters”: true,

noImplicitReturns

trueの場合、return文がある関数があった場合、if文などの条件分岐でreturnが返ってこないパターンがあると、エラーを出します。

trueの場合でも、関数の中に1つもreturnがない場合は、エラーになりません。

"noImplicitReturns": true,

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です