From 307cd6e65913631a115a6c675cf42a4efe48e4b8 Mon Sep 17 00:00:00 2001 From: sushi-chaaaan Date: Sun, 12 May 2024 23:04:11 +0900 Subject: [PATCH 01/21] refactor: type checking options --- packages/tsconfig/base.json | 12 +- .../tsconfig/docs/base/compiler-options.md | 147 ++++++++++++++++++ 2 files changed, 156 insertions(+), 3 deletions(-) create mode 100644 packages/tsconfig/docs/base/compiler-options.md diff --git a/packages/tsconfig/base.json b/packages/tsconfig/base.json index 5ae17af0..c658d3a2 100644 --- a/packages/tsconfig/base.json +++ b/packages/tsconfig/base.json @@ -1,6 +1,14 @@ { "$schema": "https://json.schemastore.org/tsconfig", "compilerOptions": { + // type checking + "allowUnreachableCode": false, + "noFallthroughCasesInSwitch": true, + "noImplicitOverride": true, + "noImplicitReturns": true, + "noPropertyAccessFromIndexSignature": true, + "noUncheckedIndexedAccess": true, + "strict": true, "esModuleInterop": true, "skipLibCheck": true, "target": "ES2022", @@ -10,9 +18,7 @@ "resolveJsonModule": true, "moduleDetection": "force", "isolatedModules": true, - "strict": true, - "forceConsistentCasingInFileNames": true, - "noUncheckedIndexedAccess": true + "forceConsistentCasingInFileNames": true }, "exclude": ["node_modules"] } diff --git a/packages/tsconfig/docs/base/compiler-options.md b/packages/tsconfig/docs/base/compiler-options.md new file mode 100644 index 00000000..55a56895 --- /dev/null +++ b/packages/tsconfig/docs/base/compiler-options.md @@ -0,0 +1,147 @@ + +# Compiler Optionsの設定 + +このドキュメントでは、[base.json](../../base.json)の各オプションの設定意図を記録しています。 +[TSConfig Reference](https://www.typescriptlang.org/ja/tsconfig/)の項目を見て設定しています。 + +基本的には + +- ランタイムエラーをTypeScriptレベルで防止していけるオプション +- 初学者がエラーを見つけやすいようにするオプション + +を設定している。 + +それそのものがランタイムエラーなどを産まないようなものはESLint側に任せる方針を取る。 + +## Type Checking + +### [Allow Unreachable Code](https://www.typescriptlang.org/ja/tsconfig/#allowUnreachableCode) + +設定値: `false` + +到達不可能なコードを許可するかどうかを設定する。 + +設定しなかった場合のwarningはエディタ上でその節がグレーアウトされるのみであり、明示的な警告を表示してくれない。 + +初学者も多いことを考慮して、エディタ上にわかりやすい警告が出るように`false`に設定している。 + +### [Allow Unused Labels](https://www.typescriptlang.org/ja/tsconfig/#allowUnusedLabels) + +設定値: `undefined (default)` + +未使用のラベルを許可するかどうかを設定する。 + +ドキュメントに `Labels are very rare in JavaScript` とあり、実際VLLのプロジェクトでもラベルを使う場面がみられないため、デフォルト値のままとする。 + +なお、このチェックはESLintで可能である。 + +### [Always Strict](https://www.typescriptlang.org/ja/tsconfig/#alwaysStrict) + +設定値: `true (default)` ([strict](#strict)を`true`に設定しているため) + +ファイル先頭に`use strict`がなくても常にstrictモードでコードを解釈するかどうかを設定する。 + +### [Exact Optional Property Types](https://www.typescriptlang.org/ja/tsconfig/#exactOptionalPropertyTypes) + +設定値: `false (default)` + +オプショナルなプロパティの型を厳密にチェックするかどうかを設定する。例についてはドキュメントを見たほうが早い。 +`?`をつけたプロパティであっても、明示的に許可しない限り`undefined`を渡せなくなる。 +この点に関しては非常に良いルールであると考える。実際TypeScript公式も有効化を推奨している。 + +**ただし、実際に有効にすると様々な関数、特に外部ライブラリの関数に`option`のような設定オブジェクトを渡す場合にエラーが発生する。これらにすべてts-expect-errorをつけるまでして有効化すべきでないと判断したため、デフォルト値のままとする。** + +### [No Fallthrough Cases In Switch](https://www.typescriptlang.org/ja/tsconfig/#noFallthroughCasesInSwitch) + +設定値: `true` + +switch文の各caseの最後で`break`, `return`, `throw`のいずれかを書かないと予期せぬ挙動を引き起こす。 +このオプションを有効にするとコンパイルエラーとして検出してくれる。 + +初学者も多いことを考慮して、エディタ上にわかりやすい警告が出るように`true`に設定している。 + +### [No Implicit Any](https://www.typescriptlang.org/ja/tsconfig/#noImplicitAny) + +設定値: `true (default)` ([strict](#strict)を`true`に設定しているため) + +暗黙的な`any`型を許可するかどうかを設定する。 + +### [No Implicit Override](https://www.typescriptlang.org/ja/tsconfig/#noImplicitOverride) + +設定値: `true` + +継承元クラスのメソッドをオーバーライドしている場合に、`override`キーワードをつけないとエラーを出すかどうかを設定する。 + +`override`キーワードを使うことで、サブクラスでオーバーライドとマークされたメソッドがリファクタリングなどでスーパークラスから削除された場合にエラーが出るようになる。`No Implicit Override`を有効にすることで、サブクラスでメソッドをオーバーライドする場合に必ずこのキーワードの追加を要求するようになり、バグの防止につながる。 + +### [No Implicit Returns](https://www.typescriptlang.org/ja/tsconfig/#noImplicitReturns) + +設定値: `true` + +戻り値の型が`void`以外に設定されている場合、すべての分岐で`return`文がないとエラーを出すかどうかを設定する。 + +初学者も多いことを考慮して、エディタ上にわかりやすい警告が出るように`true`に設定している。 + +### [No Implicit This](https://www.typescriptlang.org/ja/tsconfig/#noImplicitThis) + +設定値: `true (default)` ([strict](#strict)を`true`に設定しているため) + +`this`のスコープは非常に複雑である。`No Implicit This`を有効にすることで、暗黙的に`any`型になっている`this`にアクセスしたりするとエラーを出すようになる。 + +### [No Property Access From Index Signature](https://www.typescriptlang.org/ja/tsconfig/#noPropertyAccessFromIndexSignature) + +設定値: `true` + +```ts +interface GameSettings { + // Known up-front properties + speed: "fast" | "medium" | "slow"; + quality: "high" | "low"; + + // Assume anything unknown to the interface + // is a string. + [key: string]: string; +} + ``` + +のようなInterfaceを継承するオブジェクトは、`speed`や`quality`以外にも存在が不確かなプロパティを持つことができる。 +存在が不確かなプロパティはindex記法でアクセスすることが一般的である。 + +このオプションを有効にすると、`speed`や`quality`以外の存在が不確かなプロパティにdot記法でアクセスするとエラーを出すようになる。 + +### [No Unchecked Indexed Access](https://www.typescriptlang.org/ja/tsconfig/#noUncheckedIndexedAccess) + +設定値: `true` + +配列の要素やオブジェクトのプロパティにindex記法でアクセスする場合、常に戻り値の型が`undefined`を含むようになる。 + +トランスパイル後のJavaScriptは、存在しない要素やプロパティにアクセスすると`undefined`を返すことが知られている。 +このオプションを有効にすることで、その挙動をTypeScriptの型レベルで考慮して開発できるようになる。 + +### [No Unused Locals](https://www.typescriptlang.org/ja/tsconfig/#noUnusedLocals) + +設定値: `false (default)` + +未使用のローカル変数を許可するかどうかを設定する。 + +[この記事](https://zenn.dev/bokusunny/articles/984026f409f933)でもあるような`never`型を用いたExhaustive Checkを行う際に、一時的に変数を定義することがある際に不必要なエラーを出さないようにするため、デフォルト値のままとする。 + +なお、このチェックはESLintで可能である。 + +### [No Unused Parameters](https://www.typescriptlang.org/ja/tsconfig/#noUnusedParameters) + +設定値: `false (default)` + +未使用のパラメータを許可するかどうかを設定する。 + +[冒頭](#compiler-optionsの設定)にもあるように、このようなチェックはESLintのレイヤで行うべきであると考えるため、デフォルト値のままとする。 + +### [strict](https://www.typescriptlang.org/ja/tsconfig/#strict) + +設定値: `true` + +型チェックを厳しくすることで予期せぬバグのもとになりうる実装に対してエラーを出す。 + +**無効にする意味がないので`true`に設定する。** + +`strict: true`にともなって設定されるオプションはここでは述べない。 From 124be1fd916382324ea9baebdae155310eb5893c Mon Sep 17 00:00:00 2001 From: sushi-chaaaan Date: Sun, 12 May 2024 23:04:23 +0900 Subject: [PATCH 02/21] refactor: module options --- packages/tsconfig/base.json | 7 +- .../tsconfig/docs/base/compiler-options.md | 149 ++++++++++++++++++ 2 files changed, 153 insertions(+), 3 deletions(-) diff --git a/packages/tsconfig/base.json b/packages/tsconfig/base.json index c658d3a2..e19bc536 100644 --- a/packages/tsconfig/base.json +++ b/packages/tsconfig/base.json @@ -9,13 +9,14 @@ "noPropertyAccessFromIndexSignature": true, "noUncheckedIndexedAccess": true, "strict": true, + // modules + "module": "Node16", + "moduleResolution": "Node16", + "resolveJsonModule": true, "esModuleInterop": true, "skipLibCheck": true, "target": "ES2022", "lib": ["ES2023"], - "module": "Node16", - "moduleResolution": "Node16", - "resolveJsonModule": true, "moduleDetection": "force", "isolatedModules": true, "forceConsistentCasingInFileNames": true diff --git a/packages/tsconfig/docs/base/compiler-options.md b/packages/tsconfig/docs/base/compiler-options.md index 55a56895..297af8ed 100644 --- a/packages/tsconfig/docs/base/compiler-options.md +++ b/packages/tsconfig/docs/base/compiler-options.md @@ -145,3 +145,152 @@ interface GameSettings { **無効にする意味がないので`true`に設定する。** `strict: true`にともなって設定されるオプションはここでは述べない。 + +## Modules + +### [Allow Arbitrary Extensions](https://www.typescriptlang.org/ja/tsconfig/#allowArbitraryExtensions) + +設定値: `false (default)` + +任意の拡張子のファイルをimportすることを許可するかどうかを設定する。 + +主にWebフロントエンドでは、`.tsx`ファイルに`.css`ファイルをimportするなどが可能である。 +通常これらはバンドラが`global`NameSpaceに下のような型を定義することで型エラーが発生しない。 + +```ts +declare module '*.module.css' { + const classes: { readonly [key: string]: string } + export default classes +} +``` + +稀にこのような型が提供されていない場合があり、その場合は`allowArbitraryExtensions`を有効にしないと型エラーが発生する。 + +**基本的なバンドラやフレームワークにおいては、各パッケージが提供するドキュメントに従って適切にセットアップすれば問題ないため、デフォルト値のままとする。** + +### [Allow Importing TS Extensions](https://www.typescriptlang.org/ja/tsconfig/#allowImportingTsExtensions) + +設定値: `false (default)` + +`.ts`や`.tsx`の拡張子が付いたファイルをimportすることを許可するかどうかを設定する。 + +このような書き方をするとJavaScriptとしてトランスパイル後に実行するときにエラーが発生するため、通常は設定しない。 + +VLLにおいても、TypeScriptの拡張子をつけてimportすることはないため、デフォルト値のままとする。 + +### [Allow Umd Global Access](https://www.typescriptlang.org/ja/tsconfig/#allowUmdGlobalAccess) + +設定値: `false (default)` + +常にアクセスできることが分かっているUMDモジュールにimport文なしでアクセスすることを許可するかどうかを設定する。 + +**有効化するとコードベースの認知負荷が上昇することが予想されるため、デフォルト値のままとする。** + +### [Base URL](https://www.typescriptlang.org/ja/tsconfig/#baseUrl) + +設定値: `undefined (default)` + +相対パスを解決するための基準となるディレクトリを設定する。 + +**各プロジェクトによって異なるため、baseではデフォルト値のままとする。** + +### [Custom Conditions](https://www.typescriptlang.org/ja/tsconfig/#customConditions) + +設定値: not set + +`package.json`の`exports`, `imports`フィールド内に特殊な条件を設定している場合に、TypeScript側にその条件を考慮する必要があることを伝える。 + +特に使用しないので設定しない。 + +### [Module](https://www.typescriptlang.org/ja/tsconfig/#module) + +魔境なので違うドキュメントに書く。 + +### [Module Resolution](https://www.typescriptlang.org/ja/tsconfig/#moduleResolution) + +魔境なので違うドキュメントに書く。 + +### [Module Suffixes](https://www.typescriptlang.org/ja/tsconfig/#moduleSuffixes) + +設定値: not set + +Module Suffixに指定したSuffixを考慮してモジュール解決を行うようにTypeScriptに指示する。 + +例: `moduleSuffixes: ["css"]` とした場合、 +`import { foo } from "./foo"` と書くと`foo.css.ts`が考慮されるようになる。 + +特に使用しないので設定しない。 + +### [No Resolve](https://www.typescriptlang.org/ja/tsconfig/#noResolve) + +設定値: `false (default)` + +見たことも使ったこともないしドキュメントを読んでもわからない。 + +**触らぬ神に祟りなし。** + +### [Paths](https://www.typescriptlang.org/ja/tsconfig/#paths) + +設定値: not set + +[Base Url](#base-url)と組み合わせてimport aliasを設定する。 + +**各プロジェクトによって異なるため、baseでは設定しない。** + +### [Resolve JSON Module](https://www.typescriptlang.org/ja/tsconfig/#resolveJsonModule) + +設定値: `true` + +JSONファイルをimportすることを許可し、JSONの構造から型を生成することを許可するかどうかを設定する。 + +基本的に`true`にしておいて問題ない。 + +### [Resolve package.json Exports](https://www.typescriptlang.org/ja/tsconfig/#resolvePackageJsonExports) + +設定値: not set + +`node_modules`にあるパッケージをimportする場合、`package.json`の`exports`フィールドを見ることを強制するかどうかを設定する。 + +詳しくはドキュメントにあるが、`moduleResolution`オプションによって挙動が変わるため、基本的にそちらに任せてここでは設定しない。 + +### [Resolve package.json Imports](https://www.typescriptlang.org/ja/tsconfig/#resolvePackageJsonImports) + +設定値: not set + +[Resolve package.json Exports](#resolve-packagejson-exports)と同様。 + +`moduleResolution`オプションによって挙動が変わるため、基本的にそちらに任せてここでは設定しない。 + +### [Root Dir](https://www.typescriptlang.org/ja/tsconfig/#rootDir) + +設定値: not set + +設定しなければTypeScriptがいい感じに調べてくれるので設定しない。 + +### [Root Dirs](https://www.typescriptlang.org/ja/tsconfig/#rootDirs) + +設定値: not set + +[Root Dir](#root-dir)と同様。 + +設定しなければTypeScriptがいい感じに調べてくれるので設定しない。 + +### [Type Roots](https://www.typescriptlang.org/ja/tsconfig/#typeRoots) + +設定値: not set + +自動的にincludeされる型定義ファイルのルートディレクトリを指定する。 +ここで指定しなければ、任意の`node_modules/@types`ディレクトリ内のものが探索される。 + +特に設定する必要がないので設定しない。 + +### [Types](https://www.typescriptlang.org/ja/tsconfig/#types) + +デフォルト値: not set + +自動的にincludeされる型定義ファイルを指定する。 +ここで指定しなければ、`node_modules/@types`ディレクトリ内のものが探索される。 + +Node.jsランタイム以外のランタイムにデプロイするアプリケーションを開発する場合に、そのランタイムの型定義のみを自動でincludeしたいなどの際に使用する。 + +**各プロジェクトによって異なるため、baseでは設定しない。** From 282550a528ab67e62eb0e30f59b6e688a7e2f892 Mon Sep 17 00:00:00 2001 From: sushi-chaaaan Date: Sun, 12 May 2024 23:04:30 +0900 Subject: [PATCH 03/21] fix: tsc error --- packages/eslint-config/tsup.config.ts | 2 +- packages/prettier-config/tsup.config.ts | 2 +- packages/stylelint-config/tsup.config.ts | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/packages/eslint-config/tsup.config.ts b/packages/eslint-config/tsup.config.ts index 589d6931..b7e2a418 100644 --- a/packages/eslint-config/tsup.config.ts +++ b/packages/eslint-config/tsup.config.ts @@ -5,7 +5,7 @@ export default defineConfig({ dts: true, entry: ["./src/*.ts", "./src/presets/*.ts", "./src/addons/*.ts"], // バンドルするファイルを指定 format: ["esm"], // 出力する形式を指定 - minify: process.env.NODE_ENV === "production", + minify: process.env["NODE_ENV"] === "production", outDir: "dist", sourcemap: false, // soucemapを出力するか splitting: false, // バンドルしないで分割するか diff --git a/packages/prettier-config/tsup.config.ts b/packages/prettier-config/tsup.config.ts index 9d2962d1..039e16bc 100644 --- a/packages/prettier-config/tsup.config.ts +++ b/packages/prettier-config/tsup.config.ts @@ -5,7 +5,7 @@ export default defineConfig({ dts: true, entry: ["./src/*.ts"], // バンドルするファイルを指定 format: ["esm"], // 出力する形式を指定 - minify: process.env.NODE_ENV === "production", + minify: process.env["NODE_ENV"] === "production", outDir: "dist", sourcemap: false, // soucemapを出力するか splitting: false, // バンドルしないで分割するか diff --git a/packages/stylelint-config/tsup.config.ts b/packages/stylelint-config/tsup.config.ts index 9d2962d1..039e16bc 100644 --- a/packages/stylelint-config/tsup.config.ts +++ b/packages/stylelint-config/tsup.config.ts @@ -5,7 +5,7 @@ export default defineConfig({ dts: true, entry: ["./src/*.ts"], // バンドルするファイルを指定 format: ["esm"], // 出力する形式を指定 - minify: process.env.NODE_ENV === "production", + minify: process.env["NODE_ENV"] === "production", outDir: "dist", sourcemap: false, // soucemapを出力するか splitting: false, // バンドルしないで分割するか From 362e2ab1347bf06583adc13f8c15c94975e5db11 Mon Sep 17 00:00:00 2001 From: sushi-chaaaan Date: Mon, 13 May 2024 11:48:51 +0900 Subject: [PATCH 04/21] docs: add emit section docs --- .../tsconfig/docs/base/compiler-options.md | 183 +++++++++++++++++- 1 file changed, 182 insertions(+), 1 deletion(-) diff --git a/packages/tsconfig/docs/base/compiler-options.md b/packages/tsconfig/docs/base/compiler-options.md index 297af8ed..90ef6eec 100644 --- a/packages/tsconfig/docs/base/compiler-options.md +++ b/packages/tsconfig/docs/base/compiler-options.md @@ -286,7 +286,7 @@ JSONファイルをimportすることを許可し、JSONの構造から型を生 ### [Types](https://www.typescriptlang.org/ja/tsconfig/#types) -デフォルト値: not set +設定値: not set 自動的にincludeされる型定義ファイルを指定する。 ここで指定しなければ、`node_modules/@types`ディレクトリ内のものが探索される。 @@ -294,3 +294,184 @@ JSONファイルをimportすることを許可し、JSONの構造から型を生 Node.jsランタイム以外のランタイムにデプロイするアプリケーションを開発する場合に、そのランタイムの型定義のみを自動でincludeしたいなどの際に使用する。 **各プロジェクトによって異なるため、baseでは設定しない。** + +## Emit + +### [Declaration](https://www.typescriptlang.org/ja/tsconfig/#declaration) + +設定値: `false (default)` + +トランスパイル後のJavaScriptファイルと同時に、型定義ファイルを生成するかどうかを設定する。 + +主にライブラリ向けの設定であるため、すべてのベースとなる設定では`false`にしておく。 + +### [Declaration Dir](https://www.typescriptlang.org/ja/tsconfig/#declarationDir) + +設定値: not set + +[Declaration](#declaration)と同様の理由。 + +### [Declaration Map](https://www.typescriptlang.org/ja/tsconfig/#declarationMap) + +設定値: `false (default)` + +[Declaration](#declaration)と同様の理由。 + +### [Downlevel Iteration](https://www.typescriptlang.org/ja/tsconfig/#declarationMap) + +設定値: `false (default)` + +`tsc`でES5以前向けにトランスパイルをする場合に有効にすると、ES6以上で使えるIterator関連の構文をより正確にトランスパイルしようとする。 + +VLLでは基本的にES5以前へのトランスパイルを行わず、するとしてもバンドラ・トランスパイラを使うので設定しない。 + +### [Emit BOM](https://www.typescriptlang.org/ja/tsconfig/#emitBOM) + +設定値: `false (default)` + +見たことも使ったこともなく、ドキュメントでも`false`が一般的であると書いてあるので`false`にしておく。 + +### [Emit Declaration Only](https://www.typescriptlang.org/ja/tsconfig/#emitDeclarationOnly) + +設定値: `false (default)` + +トランスパイルを行わず、型定義だけを出力するオプション。 + +主にライブラリ向けの設定であるため、すべてのベースとなる設定では`false`にしておく。 + +### [Import Helpers](https://www.typescriptlang.org/ja/tsconfig/#importHelpers) + +設定値: `false (default)` + +トランスパイルの際に、`tslib`からヘルパー関数をimportするかどうかを設定する。 + +VLLでは基本的にES5以前へのトランスパイルを行わず、するとしてもバンドラ・トランスパイラを使うので設定しない。 + +### [Imports Not Used As Values](https://www.typescriptlang.org/ja/tsconfig/#importsNotUsedAsValues) + +設定値: `remove (default)` + +値をして利用されず、型のみで利用されているimport文をトランスパイル後のJavaScriptでどう扱うかを指定する。 + +`remove`に設定すると、型のみのimport文をトランスパイル後のJavaScriptに出力しない。 +`preserve`に設定すると、すべてのimport文が維持される。 +`error`に設定すると、型のimport文がトランスパイル後のJavaScriptに出力されるとエラーを出す。 + +このようなケースの構文チェックは`typescript-eslint`を用いてESLintルールでチェックしており、TypeScript側でもErrorを出すのはtoo muchだと考えるため、デフォルト値のままとする。 + +### [Inline Source Map](https://www.typescriptlang.org/ja/tsconfig/#inlineSourceMap) + +設定値: `false (default)` + +トランスパイル後のJavaScriptファイルにソースマップを埋め込むかどうかを設定する。 + +基本的には別ファイルにして欲しいので`false`にしておく。 + +### [Inline Sources](https://www.typescriptlang.org/ja/tsconfig/#inlineSources) + +設定値: `false (default)` + +トランスパイル後のJavaScriptファイルにTypeScriptのソースコード文字列を埋め込むかどうかを設定する。 + +基本的には必要ないので`false`にしておく。 + +### [Map Root](https://www.typescriptlang.org/ja/tsconfig/#mapRoot) + +設定値: not set + +外部のソースマップを参照する場合に指定する。 + +基本的には必要ないので設定しない。 + +### [New Line](https://www.typescriptlang.org/ja/tsconfig/#newLine) + +設定値: `LF (default)` + +標準的な実行環境は`LF`を使うため、`LF`に設定しておく。 + +### [No Emit](https://www.typescriptlang.org/ja/tsconfig/#noEmit) + +設定値: `false (default)` + +この設定を`true`にすると、`tsc`を型チェックのみに用いるようになる。 + +開発プロジェクトによっては`true`にするが、ベースとなる設定では`false`にしておく。 + +### [No Emit Helpers](https://www.typescriptlang.org/ja/tsconfig/#noEmitHelpers) + +設定値: `false (default)` + +`importHelpers`が`true`の場合に、ヘルパー関数をimportする代わりに各ファイルにヘルパー関数を埋め込むかどうかを設定する。 +大量のJavaScriptが生成される。 + +VLLでは基本的にES5以前へのトランスパイルを行わず、するとしてもバンドラ・トランスパイラを使うので設定しない。 + +### [No Emit On Error](https://www.typescriptlang.org/ja/tsconfig/#noEmitOnError) + +設定値: `false (default)` + +エラーが発生した場合にトランスパイルを行わないようにするかどうかを設定する。 + +### [Out Dir](https://www.typescriptlang.org/ja/tsconfig/#outDir) + +設定値: not set + +トランスパイル後のJavaScriptファイルを出力するディレクトリを指定する。 + +`tsc`をトランスパイラとして使うプロジェクトで個別に設定する。 + +### [Out File](https://www.typescriptlang.org/ja/tsconfig/#outFile) + +設定値: not set + +トランスパイル後のJavaScriptファイルを1つのファイルにまとめる。 +基本的にCommon JSおよびES Modules向けにTypeScriptを使うので、設定しない。 + +### [Preserve Const Enums](https://www.typescriptlang.org/ja/tsconfig/#preserveConstEnums) + +設定値: `true (default)` ([Isolated Modules](#)を`true`に設定しているため) + +`const enum`をトランスパイル後のJavaScriptに出力するかどうかを設定する。 + +基本的にIsolated Modules側で制御してよいと考えるため、ここではデフォルト値のままとする。 + +### [Preserve Value Imports](https://www.typescriptlang.org/ja/tsconfig/#preserveValueImports) + +設定値: `false (default)` + +既に非推奨のオプションなので設定しない。 + +### [Remove Comments](https://www.typescriptlang.org/ja/tsconfig/#removeComments) + +設定値: `false (default)` + +トランスパイル後のJavaScriptファイルからコメントを削除するかどうかを設定する。 + +トランスパイル後のコードの解読は非常に難しい。 +コメントを残しておくとデバッグしやすいため、基本的には`false`にしておく。 + +### [Source Map](https://www.typescriptlang.org/ja/tsconfig/#sourceMap) + +設定値: `false (default)` + +トランスパイル後のJavaScriptファイルにソースマップを出力するかどうかを設定する。 + +有効にしておくと、トランスパイル後のコードをデバッグするのが簡単になる。 + +プロジェクトによっては`true`にするが、ベースとなる設定では`false`にしておく。 + +### [Source Root](https://www.typescriptlang.org/ja/tsconfig/#sourceRoot) + +設定値: not set + +外部のソースコードを参照する場合に指定する。 + +基本的には必要ないので設定しない。 + +### [Strip Internal](https://www.typescriptlang.org/ja/tsconfig/#stripInternal) + +設定値: `false (default)` + +`@internal`アノテーションが付いたメンバーをトランスパイル後のJavaScriptに出力するかどうかを設定する。 + +プロジェクトによっては`true`にするが、ベースとなる設定では`false`にしておく。 From 8afda8de88f4d55f3dbe1f5bf76433e33c84d222 Mon Sep 17 00:00:00 2001 From: sushi-chaaaan Date: Mon, 13 May 2024 16:16:57 +0900 Subject: [PATCH 05/21] fix: js support --- packages/tsconfig/base.json | 2 ++ .../tsconfig/docs/base/compiler-options.md | 20 +++++++++++++++++++ 2 files changed, 22 insertions(+) diff --git a/packages/tsconfig/base.json b/packages/tsconfig/base.json index e19bc536..5013aaac 100644 --- a/packages/tsconfig/base.json +++ b/packages/tsconfig/base.json @@ -13,6 +13,8 @@ "module": "Node16", "moduleResolution": "Node16", "resolveJsonModule": true, + // js support + "checkJs": true, "esModuleInterop": true, "skipLibCheck": true, "target": "ES2022", diff --git a/packages/tsconfig/docs/base/compiler-options.md b/packages/tsconfig/docs/base/compiler-options.md index 90ef6eec..910f11ba 100644 --- a/packages/tsconfig/docs/base/compiler-options.md +++ b/packages/tsconfig/docs/base/compiler-options.md @@ -475,3 +475,23 @@ VLLでは基本的にES5以前へのトランスパイルを行わず、する `@internal`アノテーションが付いたメンバーをトランスパイル後のJavaScriptに出力するかどうかを設定する。 プロジェクトによっては`true`にするが、ベースとなる設定では`false`にしておく。 + +## JavaScript Support + +### [Allow Js](https://www.typescriptlang.org/ja/tsconfig/#allowJs) + +設定値: `false (default)` + +JavaScriptファイルをTypeScriptファイルへimportすることを許可するかどうかを設定する。 + +これにより、TypeScriptとJavaScriptが共存できる。基本的にソースコードにはTypeScriptのみを使うので`false`にしておく。 + +プロジェクトによっては`.js`モジュールを書かざるを得ないことがあるため、その場合は`true`にする。 + +### [Check Js](https://www.typescriptlang.org/ja/tsconfig/#checkJs) + +設定値: `true` + +JavaScriptファイルにおいてもTypeScriptと同等の型チェックをするかどうか設定する。 + +基本的には`true`にしておく。 From 4d58ea9b5d9bb94dfad6196c8f159543e918bf07 Mon Sep 17 00:00:00 2001 From: sushi-chaaaan Date: Mon, 13 May 2024 16:20:49 +0900 Subject: [PATCH 06/21] docs: compiler options --- packages/tsconfig/docs/base/compiler-options.md | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/packages/tsconfig/docs/base/compiler-options.md b/packages/tsconfig/docs/base/compiler-options.md index 910f11ba..94a707b7 100644 --- a/packages/tsconfig/docs/base/compiler-options.md +++ b/packages/tsconfig/docs/base/compiler-options.md @@ -495,3 +495,13 @@ JavaScriptファイルをTypeScriptファイルへimportすることを許可す JavaScriptファイルにおいてもTypeScriptと同等の型チェックをするかどうか設定する。 基本的には`true`にしておく。 + +### [Max Node Module JS Depth](https://www.typescriptlang.org/ja/tsconfig/#maxNodeModuleJsDepth) + +設定値: `0 (default)` + +`node_modules`内のJavaScriptファイルのうち、`d.ts`ファイルがないものを型推論する深さを指定する。 + +ドキュメントにもあるが、基本的に0であるべきである。 + + From 343090a071dec7d5ce8afcd747c5b1880658a5fc Mon Sep 17 00:00:00 2001 From: sushi-chaaaan Date: Mon, 13 May 2024 16:24:21 +0900 Subject: [PATCH 07/21] docs: editor support --- packages/tsconfig/docs/base/compiler-options.md | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) diff --git a/packages/tsconfig/docs/base/compiler-options.md b/packages/tsconfig/docs/base/compiler-options.md index 94a707b7..32315186 100644 --- a/packages/tsconfig/docs/base/compiler-options.md +++ b/packages/tsconfig/docs/base/compiler-options.md @@ -504,4 +504,20 @@ JavaScriptファイルにおいてもTypeScriptと同等の型チェックをす ドキュメントにもあるが、基本的に0であるべきである。 +## Editor Support +### [Disable Size Limit](https://www.typescriptlang.org/ja/tsconfig/#disableSizeLimit) + +設定値: `false (default)` + +TypeScriptが使用できるメモリの上限を無効にするかどうかを設定する。 + +基本的には`false`にしておく。 + +### [Plugins](https://www.typescriptlang.org/ja/tsconfig/#plugins) + +設定値: not set + +エディタ上で動作させるLanguage Serviceのプラグインを指定する。 + +プロジェクトによっては設定するが、ベースとなる設定では設定しない。 From 51dfc011e9d163c3429157969bb061221b9c991a Mon Sep 17 00:00:00 2001 From: sushi-chaaaan Date: Mon, 13 May 2024 23:19:23 +0900 Subject: [PATCH 08/21] fix: interop section --- packages/tsconfig/base.json | 7 +-- .../tsconfig/docs/base/compiler-options.md | 50 ++++++++++++++++++- 2 files changed, 53 insertions(+), 4 deletions(-) diff --git a/packages/tsconfig/base.json b/packages/tsconfig/base.json index 5013aaac..42faa2fc 100644 --- a/packages/tsconfig/base.json +++ b/packages/tsconfig/base.json @@ -15,13 +15,14 @@ "resolveJsonModule": true, // js support "checkJs": true, + // interop "esModuleInterop": true, + "forceConsistentCasingInFileNames": true, + "isolatedModules": true, "skipLibCheck": true, "target": "ES2022", "lib": ["ES2023"], - "moduleDetection": "force", - "isolatedModules": true, - "forceConsistentCasingInFileNames": true + "moduleDetection": "force" }, "exclude": ["node_modules"] } diff --git a/packages/tsconfig/docs/base/compiler-options.md b/packages/tsconfig/docs/base/compiler-options.md index 32315186..f723e5e5 100644 --- a/packages/tsconfig/docs/base/compiler-options.md +++ b/packages/tsconfig/docs/base/compiler-options.md @@ -429,7 +429,7 @@ VLLでは基本的にES5以前へのトランスパイルを行わず、する ### [Preserve Const Enums](https://www.typescriptlang.org/ja/tsconfig/#preserveConstEnums) -設定値: `true (default)` ([Isolated Modules](#)を`true`に設定しているため) +設定値: `true (default)` ([Isolated Modules](#isolated-modules)を`true`に設定しているため) `const enum`をトランスパイル後のJavaScriptに出力するかどうかを設定する。 @@ -521,3 +521,51 @@ TypeScriptが使用できるメモリの上限を無効にするかどうかを エディタ上で動作させるLanguage Serviceのプラグインを指定する。 プロジェクトによっては設定するが、ベースとなる設定では設定しない。 + +## Interop Constraints + +### [Allow Synthetic Default Imports](https://www.typescriptlang.org/ja/tsconfig/#allowSyntheticDefaultImports) + +設定値: `true (default)` ([esModuleInterop](#es-module-interop)を`true`に設定しているため) + +### [ES Module Interop](https://www.typescriptlang.org/ja/tsconfig/#esModuleInterop) + +設定値: `true` + +CommonJSモジュールをimportする際に、NameSpaceオブジェクトを生成することでESModuleと同じように扱えるようになる。 + +基本的には`true`にしておく。 + +### [Force Consistent Casing In File Names](https://www.typescriptlang.org/ja/tsconfig/#forceConsistentCasingInFileNames) + +設定値: `true` + +ファイル名の大文字・小文字を厳密にチェックするかどうかを設定する。 + +基本的には`true`にしておく。 + +### [Isolated Modules](https://www.typescriptlang.org/ja/tsconfig/#isolatedModules) + +設定値: `true` + +単一ファイルだけの情報でトランスパイルするとき、正しく解釈されない可能性のあるコードに警告を出す。主に再exportや`declare const enum`の使用を警告する。 + +基本的には`true`にしておく。 + +### [Preserve Symlinks](https://www.typescriptlang.org/ja/tsconfig/#preserveSymlinks) + +設定値: `false (default)` + +一般的には設定されないオプション。あまりわからなかったのでドキュメントを読んで欲しい。 + +### [Verbatim Module Syntax](https://www.typescriptlang.org/ja/tsconfig/#verbatimModuleSyntax) + +設定値: `false (default)` + +import文の処理が逐語的なトランスパイルになる。 + +このため、`import type {}`文は丸ごと削除され、`import {a, type B}`のような文は`import {a}`に変換される。 + +しかし、このオプションを有効にするとCommon JS向けにトランスパイルする際にもimport文がrequire文に変換されないため非常に面倒になる。 + +これと同等のチェックをESLintのプリセットで行うように設定しているため、TypeScript側ではデフォルト値のままとする。 From 803aab368a22a5a8a225c2497a971f24c6f09fc5 Mon Sep 17 00:00:00 2001 From: sushi-chaaaan Date: Mon, 13 May 2024 23:26:36 +0900 Subject: [PATCH 09/21] docs: backward section --- .../tsconfig/docs/base/compiler-options.md | 47 +++++++++++++++---- 1 file changed, 39 insertions(+), 8 deletions(-) diff --git a/packages/tsconfig/docs/base/compiler-options.md b/packages/tsconfig/docs/base/compiler-options.md index f723e5e5..6fe9167b 100644 --- a/packages/tsconfig/docs/base/compiler-options.md +++ b/packages/tsconfig/docs/base/compiler-options.md @@ -1,8 +1,8 @@ # Compiler Optionsの設定 -このドキュメントでは、[base.json](../../base.json)の各オプションの設定意図を記録しています。 -[TSConfig Reference](https://www.typescriptlang.org/ja/tsconfig/)の項目を見て設定しています。 +このドキュメントでは、[base.json](../../base.json)の各オプションの設定意図を記録している。 +設定は[TSConfig Reference](https://www.typescriptlang.org/ja/tsconfig/)の項目を見て行っている。 基本的には @@ -13,6 +13,9 @@ それそのものがランタイムエラーなどを産まないようなものはESLint側に任せる方針を取る。 +> [!WARNING] +> TypeScript5.4の時点で`deprecated`なものについては記載していないし、設定もしていない。 + ## Type Checking ### [Allow Unreachable Code](https://www.typescriptlang.org/ja/tsconfig/#allowUnreachableCode) @@ -435,12 +438,6 @@ VLLでは基本的にES5以前へのトランスパイルを行わず、する 基本的にIsolated Modules側で制御してよいと考えるため、ここではデフォルト値のままとする。 -### [Preserve Value Imports](https://www.typescriptlang.org/ja/tsconfig/#preserveValueImports) - -設定値: `false (default)` - -既に非推奨のオプションなので設定しない。 - ### [Remove Comments](https://www.typescriptlang.org/ja/tsconfig/#removeComments) 設定値: `false (default)` @@ -569,3 +566,37 @@ import文の処理が逐語的なトランスパイルになる。 しかし、このオプションを有効にするとCommon JS向けにトランスパイルする際にもimport文がrequire文に変換されないため非常に面倒になる。 これと同等のチェックをESLintのプリセットで行うように設定しているため、TypeScript側ではデフォルト値のままとする。 + +## Backwards Compatibility + +### [No Implicit Use Strict](https://www.typescriptlang.org/ja/tsconfig/#noImplicitUseStrict) + +設定値: `false (default)` + +トランスパイル後のJavaScriptファイルに`"use strict";`を追加するかどうかを設定する。 + +基本的には`false`にしておく。 + +### [No Strict Generic Checks](https://www.typescriptlang.org/ja/tsconfig/#noStrictGenericChecks) + +設定値: `false (default)` + +有効にするとジェネリクスの型チェックが甘くなる。 + +基本的には`false`にしておく。 + +### [Suppress Excess Property Errors](https://www.typescriptlang.org/ja/tsconfig/#suppressExcessPropertyErrors) + +設定値: `false (default)` + +有効にすると、オブジェクトの型定義に存在しないプロパティを追加してもエラーを出さなくなる。 + +基本的には`false`にしておく。 + +### [Suppress Implicit Any Index Errors](https://www.typescriptlang.org/ja/tsconfig/#suppressImplicitAnyIndexErrors) + +設定値: `false (default)` + +有効にすると、オブジェクトの型定義に存在しないプロパティにindex accessした際の暗黙的なAny型のエラーを出さなくなる。 + +基本的には`false`にしておく。 From 89a9900fab0a3f1c4ad54d9e194eb72074e69a03 Mon Sep 17 00:00:00 2001 From: sushi-chaaaan Date: Tue, 14 May 2024 17:49:10 +0900 Subject: [PATCH 10/21] docs: decorator --- .../tsconfig/docs/base/compiler-options.md | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) diff --git a/packages/tsconfig/docs/base/compiler-options.md b/packages/tsconfig/docs/base/compiler-options.md index 6fe9167b..d16fb610 100644 --- a/packages/tsconfig/docs/base/compiler-options.md +++ b/packages/tsconfig/docs/base/compiler-options.md @@ -600,3 +600,21 @@ import文の処理が逐語的なトランスパイルになる。 有効にすると、オブジェクトの型定義に存在しないプロパティにindex accessした際の暗黙的なAny型のエラーを出さなくなる。 基本的には`false`にしておく。 + +## Language and Environment + +### [Emit Decorator Metadata](https://www.typescriptlang.org/ja/tsconfig/#emitDecoratorMetadata) + +設定値: `false (default)` + +デコレータのメタデータを出力するかどうかを設定する。 + +デコレータ自体が実験的な機能であることからベースとなる設定では`false`にしておく。 + +### [Experimental Decorators](https://www.typescriptlang.org/ja/tsconfig/#experimentalDecorators) + +設定値: `false (default)` + +デコレータを有効にするかどうかを設定する。 + +デコレータ自体が実験的な機能であることからベースとなる設定では`false`にしておく。 From 0903a172c5324fd6275b29f1dc80434fe891bd93 Mon Sep 17 00:00:00 2001 From: Kentaro Suzuki Date: Sat, 25 May 2024 08:38:09 +0900 Subject: [PATCH 11/21] Fix/issue 105 js override error (#106) * fix: disable allowJs and checkJs in base config * chore: changeset --- .changeset/tidy-gifts-brush.md | 5 +++++ packages/tsconfig/base.json | 2 -- packages/tsconfig/docs/base/compiler-options.md | 8 ++++++-- 3 files changed, 11 insertions(+), 4 deletions(-) create mode 100644 .changeset/tidy-gifts-brush.md diff --git a/.changeset/tidy-gifts-brush.md b/.changeset/tidy-gifts-brush.md new file mode 100644 index 00000000..c2fca62a --- /dev/null +++ b/.changeset/tidy-gifts-brush.md @@ -0,0 +1,5 @@ +--- +"@virtual-live-lab/tsconfig": patch +--- + +Disable allowJs and checkJs by default diff --git a/packages/tsconfig/base.json b/packages/tsconfig/base.json index 42faa2fc..39f01a12 100644 --- a/packages/tsconfig/base.json +++ b/packages/tsconfig/base.json @@ -13,8 +13,6 @@ "module": "Node16", "moduleResolution": "Node16", "resolveJsonModule": true, - // js support - "checkJs": true, // interop "esModuleInterop": true, "forceConsistentCasingInFileNames": true, diff --git a/packages/tsconfig/docs/base/compiler-options.md b/packages/tsconfig/docs/base/compiler-options.md index d16fb610..5027fd7e 100644 --- a/packages/tsconfig/docs/base/compiler-options.md +++ b/packages/tsconfig/docs/base/compiler-options.md @@ -487,11 +487,15 @@ JavaScriptファイルをTypeScriptファイルへimportすることを許可す ### [Check Js](https://www.typescriptlang.org/ja/tsconfig/#checkJs) -設定値: `true` +設定値: `false (default)` JavaScriptファイルにおいてもTypeScriptと同等の型チェックをするかどうか設定する。 -基本的には`true`にしておく。 +~~基本的には`true`にしておく。~~ + +\#105のように、`tsc`がJavaScriptファイルもトランスパイルしようとしてOverwriteエラーが発生してしまうので、`false`にしておく。 + +なお、JavaScriptでも型チェックが必要な場合は`// @ts-check`をファイルの先頭に書くことで有効にできる。 ### [Max Node Module JS Depth](https://www.typescriptlang.org/ja/tsconfig/#maxNodeModuleJsDepth) From a7e8493a51bb2d6c9cb9b151d0f81b60f65f4ac7 Mon Sep 17 00:00:00 2001 From: sushi-chaaaan Date: Fri, 7 Jun 2024 00:18:52 +0900 Subject: [PATCH 12/21] docs: language-and-environment --- .../tsconfig/docs/base/compiler-options.md | 72 +++++++++++++++++++ 1 file changed, 72 insertions(+) diff --git a/packages/tsconfig/docs/base/compiler-options.md b/packages/tsconfig/docs/base/compiler-options.md index 5027fd7e..c6235249 100644 --- a/packages/tsconfig/docs/base/compiler-options.md +++ b/packages/tsconfig/docs/base/compiler-options.md @@ -622,3 +622,75 @@ import文の処理が逐語的なトランスパイルになる。 デコレータを有効にするかどうかを設定する。 デコレータ自体が実験的な機能であることからベースとなる設定では`false`にしておく。 + +### [JSX](https://www.typescriptlang.org/ja/tsconfig/#jsx) + +設定値: **プロジェクトによって異なるため注意が必要** + +JSXをどのJSX Runtimeに合わせたJavaScriptにトランスパイルするかを設定する。 +基本的には使用するライブラリまたはフレームワークの設定に準拠する。 + +> [!NOTE] +> このオプションの詳細な説明は英語版ドキュメントを参照してください。 +> +> + +### [JSX Factory](https://www.typescriptlang.org/ja/tsconfig/#jsxFactory) + +設定値: `React.createElement (default)` + +JSXをトランスパイルする際に使用する関数を指定する。 + +基本的には必要ないので設定しない。 + +### [jsxImportSource](https://www.typescriptlang.org/ja/tsconfig/#jsxImportSource) + +設定値: `react (default)` + +[JSX](#jsx)を`react-jsx`や`react-jsxdev`に設定する場合に、`jsx()`や`jsxs()`のFactory関数をインポートする際のパッケージ名を指定する。 + +### [Lib](https://www.typescriptlang.org/ja/tsconfig/#lib) + +設定値: **プロジェクトによって異なるため注意が必要** + +TypeScriptには特定のバージョンのECMA Scriptやブラウザ上のDOM APIの型定義が含まれている。 +ここで指定したものは、importなしでグローバルに使用できる型として認識される。 + +何もしなくても[target](#target)で指定したECMA Scriptのバージョンに合わせた型定義は自動的に追加されるが、それ以外に追加の型定義をグローバルで使用したい場合に設定する。 + +### [Module Detection](https://www.typescriptlang.org/ja/tsconfig/#moduleResolution) + +設定値: `auto (default)` + +TypeScriptがスクリプトとモジュールを区別する方法を指定する。 +デフォルトの値に設定しておくと他のオプションから自動的に最適な方法で判断されるので、基本的には設定しない。 + +### [No Lib](https://www.typescriptlang.org/ja/tsconfig/#noLib) + +設定値: not set + +[Lib](#lib)とは逆に、TypeScriptが提供する標準ライブラリの型定義を無効にする。 + +基本的には設定しない。 + +### [Target](https://www.typescriptlang.org/ja/tsconfig/#target) + +設定値: **プロジェクトによって異なるため注意が必要** + +トランスパイル後のJavaScriptのバージョンを指定する。 + +設定値より新しい構文のJavaScriptは、古いバージョンで解釈できる記法に変換される。 + +> [!WARNING] +> targetを`ESNext`に指定した場合、常に最新のJavaScript構文が使えると解釈される。 +> これは予期せぬ挙動を生む可能性があるため、使用には注意が必要である。 +> +> とはいえ最新の構文をどんどん使うことはあまりなく、かなりのライブラリが`ESNext`を指定しているため、あまり気にしなくてよいのも事実である。 + +### [Use Define For Class Fields](https://www.typescriptlang.org/ja/tsconfig/#useDefineForClassFields) + +設定値: デフォルト + +クラス宣言がどのようにトランスパイルされるかを指定する。`true`に設定すると、クラスフィールドを`Object.defineProperty`で定義するようになる。 + +基本的にはデフォルト値のままとする。 From 7dfcd18383b809413b5d8ef52862bfc1a017d2f7 Mon Sep 17 00:00:00 2001 From: sushi-chaaaan Date: Fri, 7 Jun 2024 00:20:23 +0900 Subject: [PATCH 13/21] docs: compiler diagnostic --- packages/tsconfig/docs/base/compiler-options.md | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/packages/tsconfig/docs/base/compiler-options.md b/packages/tsconfig/docs/base/compiler-options.md index c6235249..77b5f048 100644 --- a/packages/tsconfig/docs/base/compiler-options.md +++ b/packages/tsconfig/docs/base/compiler-options.md @@ -694,3 +694,7 @@ TypeScriptがスクリプトとモジュールを区別する方法を指定す クラス宣言がどのようにトランスパイルされるかを指定する。`true`に設定すると、クラスフィールドを`Object.defineProperty`で定義するようになる。 基本的にはデフォルト値のままとする。 + +## Compiler Diagnostics + +この章の設定はデバッグに用いるものであるため、設定しないし説明もしない。 From 6ff6707a8da9a16daad668c37fa0b84ba62f0c18 Mon Sep 17 00:00:00 2001 From: sushi-chaaaan Date: Fri, 7 Jun 2024 00:22:50 +0900 Subject: [PATCH 14/21] remove moduleDetection --- packages/tsconfig/base.json | 1 - 1 file changed, 1 deletion(-) diff --git a/packages/tsconfig/base.json b/packages/tsconfig/base.json index 39f01a12..49ee7642 100644 --- a/packages/tsconfig/base.json +++ b/packages/tsconfig/base.json @@ -20,7 +20,6 @@ "skipLibCheck": true, "target": "ES2022", "lib": ["ES2023"], - "moduleDetection": "force" }, "exclude": ["node_modules"] } From 9a33343dc9c9bac9c99f022a031d08fbd79bd3f1 Mon Sep 17 00:00:00 2001 From: sushi-chaaaan Date: Fri, 7 Jun 2024 02:07:35 +0900 Subject: [PATCH 15/21] docs: projects, output formatting --- .../tsconfig/docs/base/compiler-options.md | 29 +++++++++++++++++++ 1 file changed, 29 insertions(+) diff --git a/packages/tsconfig/docs/base/compiler-options.md b/packages/tsconfig/docs/base/compiler-options.md index 77b5f048..cb5bffa3 100644 --- a/packages/tsconfig/docs/base/compiler-options.md +++ b/packages/tsconfig/docs/base/compiler-options.md @@ -698,3 +698,32 @@ TypeScriptがスクリプトとモジュールを区別する方法を指定す ## Compiler Diagnostics この章の設定はデバッグに用いるものであるため、設定しないし説明もしない。 + +## Projects + +この章の設定は主に`tsc`でコンパイルするライブラリ開発に用いるものであるため、設定しないし説明もしない。 + +## Output Formatting + +### [No Error Truncation](https://www.typescriptlang.org/ja/tsconfig/#noErrorTruncation) + +設定値: `false (default)` + +`true`に設定するとエラーメッセージが切り捨てられなくなる。 + +複雑な型のエラーメッセージが非常に長くなるので、基本的には`false`にしておく。 + +### [Preserve Watch Output](https://www.typescriptlang.org/ja/tsconfig/#preserveWatchOutput) + +設定値: not set + +> [!CAUTION] +> このオプションはinternalなものであり、ユーザーが設定することを想定していない。 + +### [Pretty](https://www.typescriptlang.org/ja/tsconfig/#pretty) + +設定値: `true (default)` + +エラーやメッセージを見やすくスタイリングしてくれる。 + +基本的には`true`にしておく。 From d84b5c69dee4d3d89a924d706365cf701e07885e Mon Sep 17 00:00:00 2001 From: sushi-chaaaan Date: Fri, 7 Jun 2024 02:13:52 +0900 Subject: [PATCH 16/21] docs: completeness --- .../tsconfig/docs/base/compiler-options.md | 22 +++++++++++++++++++ 1 file changed, 22 insertions(+) diff --git a/packages/tsconfig/docs/base/compiler-options.md b/packages/tsconfig/docs/base/compiler-options.md index cb5bffa3..999c3aa6 100644 --- a/packages/tsconfig/docs/base/compiler-options.md +++ b/packages/tsconfig/docs/base/compiler-options.md @@ -727,3 +727,25 @@ TypeScriptがスクリプトとモジュールを区別する方法を指定す エラーやメッセージを見やすくスタイリングしてくれる。 基本的には`true`にしておく。 + +## Completeness + +### [Skip Default Lib Check](https://www.typescriptlang.org/ja/tsconfig/#skipDefaultLibCheck) + +設定値: not set + +> [!CAUTION] +> 代わりに[Skip Lib Check](#skip-lib-check)を使用する。 + +### [Skip Lib Check](https://www.typescriptlang.org/ja/tsconfig/#skipLibCheck) + +設定値: `false (default)` + +TypeScriptが`d.ts`ファイルの型チェックをスキップするかどうかを設定する。 +基本的にはライブラリの型定義の不一致を封殺するために使用する。 + +必要になったら有効にするが、基本的には`false`にしておく。 + +## Watch Options + +後日書く。基本使わない。 From 41964939cbc48330053e3209f4bab56eef6c389e Mon Sep 17 00:00:00 2001 From: sushi-chaaaan Date: Fri, 7 Jun 2024 02:16:56 +0900 Subject: [PATCH 17/21] adjust base config --- packages/tsconfig/base.json | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/packages/tsconfig/base.json b/packages/tsconfig/base.json index 49ee7642..727e899c 100644 --- a/packages/tsconfig/base.json +++ b/packages/tsconfig/base.json @@ -17,9 +17,11 @@ "esModuleInterop": true, "forceConsistentCasingInFileNames": true, "isolatedModules": true, - "skipLibCheck": true, + // language-and-environment "target": "ES2022", "lib": ["ES2023"], + // completeness + "skipLibCheck": true }, "exclude": ["node_modules"] } From 27aba97aa6cf2e6047d7dcecbe6646073bfcc6b6 Mon Sep 17 00:00:00 2001 From: sushi-chaaaan Date: Fri, 7 Jun 2024 02:32:24 +0900 Subject: [PATCH 18/21] chore: changeset --- .changeset/fresh-islands-promise.md | 5 +++++ 1 file changed, 5 insertions(+) create mode 100644 .changeset/fresh-islands-promise.md diff --git a/.changeset/fresh-islands-promise.md b/.changeset/fresh-islands-promise.md new file mode 100644 index 00000000..f5d388fc --- /dev/null +++ b/.changeset/fresh-islands-promise.md @@ -0,0 +1,5 @@ +--- +"@virtual-live-lab/tsconfig": patch +--- + +set moduleDetection to auto From 92986ce028fc78470d946d46cf4eddf09dbbaff9 Mon Sep 17 00:00:00 2001 From: sushi-chaaaan Date: Sat, 8 Jun 2024 16:46:38 +0900 Subject: [PATCH 19/21] docs: target, lib --- .../tsconfig/docs/base/compiler-options.md | 21 +++++++++++++++---- 1 file changed, 17 insertions(+), 4 deletions(-) diff --git a/packages/tsconfig/docs/base/compiler-options.md b/packages/tsconfig/docs/base/compiler-options.md index 999c3aa6..443e33d5 100644 --- a/packages/tsconfig/docs/base/compiler-options.md +++ b/packages/tsconfig/docs/base/compiler-options.md @@ -625,11 +625,13 @@ import文の処理が逐語的なトランスパイルになる。 ### [JSX](https://www.typescriptlang.org/ja/tsconfig/#jsx) -設定値: **プロジェクトによって異なるため注意が必要** +設定値: not set JSXをどのJSX Runtimeに合わせたJavaScriptにトランスパイルするかを設定する。 基本的には使用するライブラリまたはフレームワークの設定に準拠する。 +**各プロジェクトによって異なるため、baseでは設定しない。** + > [!NOTE] > このオプションの詳細な説明は英語版ドキュメントを参照してください。 > @@ -651,12 +653,19 @@ JSXをトランスパイルする際に使用する関数を指定する。 ### [Lib](https://www.typescriptlang.org/ja/tsconfig/#lib) -設定値: **プロジェクトによって異なるため注意が必要** +設定値: `ES2023` TypeScriptには特定のバージョンのECMA Scriptやブラウザ上のDOM APIの型定義が含まれている。 ここで指定したものは、importなしでグローバルに使用できる型として認識される。 - 何もしなくても[target](#target)で指定したECMA Scriptのバージョンに合わせた型定義は自動的に追加されるが、それ以外に追加の型定義をグローバルで使用したい場合に設定する。 +**プロジェクトやFWによって推奨される設定値が異なるため注意が必要** + +VLLで標準的な開発環境として使用するNode.jsのバージョンは20.x or 22.xであり、両者ともES2023の構文まではほぼ完全に対応している。 +このため、ES2023を指定している。 + +> [!TIP] +> Node.jsの各ECMA Scriptへの対応状況は以下のページを参考にしている。 +> ### [Module Detection](https://www.typescriptlang.org/ja/tsconfig/#moduleResolution) @@ -675,12 +684,16 @@ TypeScriptがスクリプトとモジュールを区別する方法を指定す ### [Target](https://www.typescriptlang.org/ja/tsconfig/#target) -設定値: **プロジェクトによって異なるため注意が必要** +設定値: `ES2022` トランスパイル後のJavaScriptのバージョンを指定する。 設定値より新しい構文のJavaScriptは、古いバージョンで解釈できる記法に変換される。 +VLLで標準的な開発環境として使用するNode.jsのバージョンは20.x or 22.xであるが、 +[tsconfig/base](https://github.com/tsconfig/bases/blob/main/bases)ではnode20・node22ともに +targetに`ES2022`を指定している。 このため、baseでも`ES2022`を指定している。 + > [!WARNING] > targetを`ESNext`に指定した場合、常に最新のJavaScript構文が使えると解釈される。 > これは予期せぬ挙動を生む可能性があるため、使用には注意が必要である。 From 9efe20b2f5d6ccc9251830c17a66359b0866e2fa Mon Sep 17 00:00:00 2001 From: sushi-chaaaan Date: Sat, 8 Jun 2024 16:56:08 +0900 Subject: [PATCH 20/21] docs: module, moduleResolution --- .../tsconfig/docs/base/compiler-options.md | 30 +++++++++++++++++-- 1 file changed, 27 insertions(+), 3 deletions(-) diff --git a/packages/tsconfig/docs/base/compiler-options.md b/packages/tsconfig/docs/base/compiler-options.md index 443e33d5..e85cf9d4 100644 --- a/packages/tsconfig/docs/base/compiler-options.md +++ b/packages/tsconfig/docs/base/compiler-options.md @@ -207,11 +207,32 @@ VLLにおいても、TypeScriptの拡張子をつけてimportすることはな ### [Module](https://www.typescriptlang.org/ja/tsconfig/#module) -魔境なので違うドキュメントに書く。 +設定値: `node16` + +JavaScriptへトランスパイルする際に利用するモジュールシステムを指定する。 +ここでのモジュールシステムは主にCommonJSとES Moduleの2つがある。 + +しかし、Node.jsはこれら2つの両方に対応しており、設定が困難だった。 +このため、TypeScript4.7で追加されたNode.js向け専用の`node16`を指定している。 + +> [!IMPORTANT] +> このオプションは最も難解なものの1つである。 +> +> ぜひこの記事を読んで理解を深めて欲しい。 +> ### [Module Resolution](https://www.typescriptlang.org/ja/tsconfig/#moduleResolution) -魔境なので違うドキュメントに書く。 +設定値: `node16` + +[module](#module)の設定値によって挙動が大きく変わるオプション。 +認知不可を下げるため、明示的に`node16`を指定している。 + +> [!IMPORTANT] +> 例によって、このオプションも難解なものの1つである。 +> +> ぜひこの記事を読んで理解を深めて欲しい。 +> ### [Module Suffixes](https://www.typescriptlang.org/ja/tsconfig/#moduleSuffixes) @@ -687,9 +708,12 @@ TypeScriptがスクリプトとモジュールを区別する方法を指定す 設定値: `ES2022` トランスパイル後のJavaScriptのバージョンを指定する。 - 設定値より新しい構文のJavaScriptは、古いバージョンで解釈できる記法に変換される。 +> [!WARNING] +> **[module](#module)と異なり、あくまでもJavaScriptの構文のバージョンを指定しているだけであることに注意** +> 使用するモジュールシステムはtargetの設定値には影響されない、 + VLLで標準的な開発環境として使用するNode.jsのバージョンは20.x or 22.xであるが、 [tsconfig/base](https://github.com/tsconfig/bases/blob/main/bases)ではnode20・node22ともに targetに`ES2022`を指定している。 このため、baseでも`ES2022`を指定している。 From 21ec84974ecc7689ee935f8826c11d855dcf9420 Mon Sep 17 00:00:00 2001 From: sushi-chaaaan Date: Sat, 8 Jun 2024 16:57:05 +0900 Subject: [PATCH 21/21] chore: changeset --- .changeset/small-eagles-fix.md | 5 +++++ 1 file changed, 5 insertions(+) create mode 100644 .changeset/small-eagles-fix.md diff --git a/.changeset/small-eagles-fix.md b/.changeset/small-eagles-fix.md new file mode 100644 index 00000000..370c1a6e --- /dev/null +++ b/.changeset/small-eagles-fix.md @@ -0,0 +1,5 @@ +--- +"@virtual-live-lab/tsconfig": minor +--- + +Refactor base config