t28.dev

tsconfig/bases 内の tsconfig.json を (自分が知りたい範囲で) 比較する

2023/3/1
Tech

tsconfig/bases?

コミュニティでメンテナンスされている 環境毎のおすすめ tsconfig、及びそのリポジトリ (tsconfig/bases) のこと。 雑多になりがちな tsconfig.json がスッキリするし、コミュニティで決めてくれたいい感じの設定に乗っかれて楽なので、私はよく使っています。

{
  "extends": "なにか",
  "compilerOptions": {
    // ちょこっと
  }
}

設定を比較してみる

前述の通り、tsconfig/bases には環境毎に tsconfig.json が提供されており、それらの具体的な差分が気になったのでメモしておく。

Node 16 and Node 16 + Strictest

(;'8')?! < % diff <(curl -s https://raw.githubusercontent.com/tsconfig/bases/main/bases/node16.json) <(curl -s https://raw.githubusercontent.com/tsconfig/bases/main/bases/node16-strictest.combined.json)
0a1,2
> // This file was autogenerated by a script
> // Equivalent to a config of: strictest extends node16
3,4c5
<   "display": "Node 16",
<
---
>   "display": "Node 16 + Strictest",
6c7,9
<     "lib": ["es2021"],
---
>     "lib": [
>       "es2021"
>     ],
9d11
<
14c16,28
<     "moduleResolution": "node"
---
>     "moduleResolution": "node",
>     "allowUnusedLabels": false,
>     "allowUnreachableCode": false,
>     "exactOptionalPropertyTypes": true,
>     "noFallthroughCasesInSwitch": true,
>     "noImplicitOverride": true,
>     "noImplicitReturns": true,
>     "noPropertyAccessFromIndexSignature": true,
>     "noUncheckedIndexedAccess": true,
>     "noUnusedLocals": true,
>     "noUnusedParameters": true,
>     "importsNotUsedAsValues": "error",
>     "checkJs": true
16c30
< }
---
> }
\ No newline at end of file

+ Strictest とある通り、strictest 用の追加された設定のみが差分

Node 16 Strictest and Node 16 + ESM + Strictest

(;'8')?! < % diff <(curl -s https://raw.githubusercontent.com/tsconfig/bases/main/bases/node16-strictest.combined.json) <(curl -s https://raw.githubusercontent.com/tsconfig/bases/main/bases/node16-strictest-esm.combined.json)
2c2
< // Equivalent to a config of: strictest extends node16
---
> // Equivalent to a config of: strictest extends esm extends node16
5c5
<   "display": "Node 16 + Strictest",
---
>   "display": "Node 16 + ESM + Strictest",
10c10
<     "module": "commonjs",
---
>     "module": "es2022",

+ ESM とある通り、ESM 用の追加された設定のみが差分

Node 16 + ESM + Strictest and Node 18 + ESM + Strictest

(;'8')?! < % diff <(curl -s https://raw.githubusercontent.com/tsconfig/bases/main/bases/node16-strictest-esm.combined.json) <(curl -s https://raw.githubusercontent.com/tsconfig/bases/main/bases/node18-strictest-esm.combined.json)
2c2
< // Equivalent to a config of: strictest extends esm extends node16
---
> // Equivalent to a config of: strictest extends esm extends node18
5c5
<   "display": "Node 16 + ESM + Strictest",
---
>   "display": "Node 18 + ESM + Strictest",
8c8
<       "es2021"
---
>       "es2022"
11c11
<     "target": "es2021",
---
>     "target": "es2022",

lib, target の差分のみ

Node 18 + ESM + Strictest and Node LTS + ESM + Strictest

(;'8')?! < % diff <(curl -s https://raw.githubusercontent.com/tsconfig/bases/main/bases/node18-strictest-esm.combined.json) <(curl -s https://raw.githubusercontent.com/tsconfig/bases/main/bases/node-lts-strictest-esm.combined.json)
5c5,6
<   "display": "Node 18 + ESM + Strictest",
---
>   "display": "Node LTS + ESM + Strictest",
>   "_version": "18.12.1",

今日時点の Node.js の LTS は v18 なので、Node LTS + ESM + StrictestNode 18 + ESM + Strictest と同じ