tsconfig.jsonを煮詰める
今まで感覚で設定していたので煮詰める
下記に各項目の説明も記す
code:json
{
"compilerOptions": {
"target": "es2017",
"module": "commonjs",
"moduleResolution": "node",
"esModuleInterop": true,
"forceConsistentCasingInFileNames": true,
"strict": true,
"allowJs": true,
"declaration": true,
"declarationMap": true,
"sourceMap": true,
"noUnusedLocals": true,
"noUnusedParameters": true,
"noImplicitReturns": true,
"noFallthroughCasesInSwitch": true,
"rootDir": "./src",
"baseUrl": "./",
"outDir": "./dist",
"noEmitOnError": true,
"resolveJsonModule": true
},
"include": [
"./src/**/*"
],
"exclude": [
"node_modules",
"lib",
"dist"
]
}
compilerOptions
コンパイルのオプション設定
include
コンパイル対象を指定
src配下で作業するので、./src/**/*指定する
環境によって適宜変わる
exclude
コンパイルしない対象を指定
指定しないとnode_modelesとoutDirで指定したディレクトリしか対象にならないのでlibも指定する
指定したらnode_modelesやoutDirは対象外になってしまうのでそれらも記述しておく
includeでsrc指定してるから要らない気もする
compilerOptions配下
target
出力するjsのバージョンを指定
どっちにしろ公開する時はrollupなどでバンドルするからローカルで実行できればなんでもいいと思う
es2017~esnext
module
出力するjsのモジュールの仕組みを指定する
ローカルで実行しやすいようにcommonjsを指定
(2021/06/01 追記)
昨今の流行りを見るにNode.js向けのパッケージもesmに移行しそうな感じ
ギリギリまでcommonjs指定するが近くesnext指定に変わる
(追記終わり)
moduleResolution
tscのモジュール解決の方法を指定
デフォルト値のclassicは後方互換のために残してある値らしいのでとりあえずnodeを指定
esModuleInterop
CommonJS と相互運用可能なコードが出力されるようになり、デフォルトインポートも使える
またこれを有効にすると、CommonJS 形式のコンパイルエラーを回避できるallowSyntheticDefaultImportsも自動的に有効になる
true
forceConsistentCasingInFileNames
import 時に大文字小文字を区別して参照を解決する
windowsじゃ効かないらしい
よくバグるので拡張機能の再起動で治す
true
strict
厳密な型チェック
--noImplicitAny
--noImplicitThis
--alwaysStrict
--strictBindCallApply
--strictNullChecks
--strictFunctionTypes
--strictPropertyInitialization
以上が有効化される
もちろんtrue
allowJs
.jsと.jsxがコンパイル対象に含まれるようになる
状況によってtrue
declaration
ファイル毎に型定義ファイル(.d.ts)を生成する
tscで配布するなら使う
一応true
declarationMap
型定義のmapファイルが作成される
declarationを有効化しているので一応true
sourceMap
コンパイルしたファイルのmapファイルを作成
これも一応trueにしてる
(2021/06/01 追記)
配布する時にソースマップが必要なのかわからない(エラーが見やすくなるけど)
rollupでバンドルする時に切れともいわれる
(追記終わり)
noUnusedLocals
宣言されたが使用されていない変数が存在するとコンパイルエラーになる
開発中はなかなかうざいので切ってもいいが設計王になりたいのでtrue
noUnusedParameters
関数の引数を利用していないとコンパイルエラーになる
true
第一引数を使わない時はアンダースコア(_)を使う
noImplicitReturns
return が必要な関数で、return が存在しないルートが存在するとコンパイルエラーになる
このエラーで悩む時はそもそも関数がでかくなり過ぎてる
true
noFallthroughCasesInSwitch
switch 文のcase 内でbreak やreturn が存在しないとコンパイルエラーになる
true
rootDir
コンパイル結果を吐き出す際に、どのディレクトリ配下のディレクトリ構造で出力するか指定
src配下で作業するので./srcを指定
src外のファイルをimportできなくなるので注意、package.jsonなどが参照できなくなる
monorepoで外のファイルを読み込む必要がある時は適宜変更
baseUrl
パスの起点を決める
相対パスの方がファイルの親子関係がイメージしやすいので絶対パスはなるべく使わない
ここのパスを変えると影響力多くてめんどくさいイメージがあるので変えていない
./
outDir
コンパイル先を決める
./dist
noEmitOnError
エラーがある時にコンパイルされない
強くなろう
true
resolveJsonModule
jsonファイルを型定義付きで取得できるようになる
true
参考