From e42ff5e5eac742f723e6004a37392ade80924eac Mon Sep 17 00:00:00 2001 From: sushichan044 <71284054+sushichan044@users.noreply.github.com> Date: Sun, 27 Jul 2025 23:59:13 +0900 Subject: [PATCH 1/8] feat!: enable exactOptionalPropertyTypes --- packages/tsconfig/base.json | 1 + packages/tsconfig/docs/base/compiler-options.md | 6 ++++-- 2 files changed, 5 insertions(+), 2 deletions(-) diff --git a/packages/tsconfig/base.json b/packages/tsconfig/base.json index bdd0c4f8..51830295 100644 --- a/packages/tsconfig/base.json +++ b/packages/tsconfig/base.json @@ -8,6 +8,7 @@ "noImplicitReturns": true, "noPropertyAccessFromIndexSignature": true, "noUncheckedIndexedAccess": true, + "exactOptionalPropertyTypes": true, "strict": true, "strictNullChecks": true, // modules diff --git a/packages/tsconfig/docs/base/compiler-options.md b/packages/tsconfig/docs/base/compiler-options.md index f12112db..19345eae 100644 --- a/packages/tsconfig/docs/base/compiler-options.md +++ b/packages/tsconfig/docs/base/compiler-options.md @@ -46,13 +46,15 @@ ### [Exact Optional Property Types](https://www.typescriptlang.org/ja/tsconfig/#exactOptionalPropertyTypes) -設定値: `false (default)` +設定値: `true` オプショナルなプロパティの型を厳密にチェックするかどうかを設定する。例についてはドキュメントを見たほうが早い。 `?`をつけたプロパティであっても、明示的に許可しない限り`undefined`を渡せなくなる。 この点に関しては非常に良いルールであると考える。実際TypeScript公式も有効化を推奨している。 -**ただし、実際に有効にすると様々な関数、特に外部ライブラリの関数に`option`のような設定オブジェクトを渡す場合にエラーが発生する。これらにすべてts-expect-errorをつけるまでして有効化すべきでないと判断したため、デフォルト値のままとする。** +~~ただし、実際に有効にすると様々な関数、特に外部ライブラリの関数に`option`のような設定オブジェクトを渡す場合にエラーが発生する。これらにすべてts-expect-errorをつけるまでして有効化すべきでないと判断したため、デフォルト値のままとする。~~ + +TypeScript 5.9 以降この設定は `tsc --init` で生成される推奨設定に含まれていており、このオプションを有効にして問題ないほどエコシステムが成熟したと考えられるため有効化した。 ### [No Fallthrough Cases In Switch](https://www.typescriptlang.org/ja/tsconfig/#noFallthroughCasesInSwitch) From 3bfcc491013133953d60a80d7944ab4d892dccb4 Mon Sep 17 00:00:00 2001 From: sushichan044 <71284054+sushichan044@users.noreply.github.com> Date: Mon, 28 Jul 2025 00:01:47 +0900 Subject: [PATCH 2/8] changeset for exactOptionalPropertyTypes --- .changeset/huge-files-smile.md | 5 +++++ 1 file changed, 5 insertions(+) create mode 100644 .changeset/huge-files-smile.md diff --git a/.changeset/huge-files-smile.md b/.changeset/huge-files-smile.md new file mode 100644 index 00000000..b5689551 --- /dev/null +++ b/.changeset/huge-files-smile.md @@ -0,0 +1,5 @@ +--- +"@virtual-live-lab/tsconfig": major +--- + +feat!: enable exactOptionalPropertyTypes From 3f005ae9ca3d4da929b0ac0b761725c0f252a845 Mon Sep 17 00:00:00 2001 From: sushichan044 <71284054+sushichan044@users.noreply.github.com> Date: Mon, 28 Jul 2025 00:03:17 +0900 Subject: [PATCH 3/8] feat!: enable verbatimModuleSyntax --- packages/tsconfig/base.json | 1 + packages/tsconfig/docs/base/compiler-options.md | 8 +++++--- 2 files changed, 6 insertions(+), 3 deletions(-) diff --git a/packages/tsconfig/base.json b/packages/tsconfig/base.json index 51830295..9195bf2a 100644 --- a/packages/tsconfig/base.json +++ b/packages/tsconfig/base.json @@ -19,6 +19,7 @@ "esModuleInterop": true, "forceConsistentCasingInFileNames": true, "isolatedModules": true, + "verbatimModuleSyntax": true, // language-and-environment "target": "ES2022", "lib": ["ES2023"], diff --git a/packages/tsconfig/docs/base/compiler-options.md b/packages/tsconfig/docs/base/compiler-options.md index 19345eae..08ba9bcb 100644 --- a/packages/tsconfig/docs/base/compiler-options.md +++ b/packages/tsconfig/docs/base/compiler-options.md @@ -607,15 +607,17 @@ CommonJSモジュールをimportする際に、NameSpaceオブジェクトを生 ### [Verbatim Module Syntax](https://www.typescriptlang.org/ja/tsconfig/#verbatimModuleSyntax) -設定値: `false (default)` +設定値: `true` import文の処理が逐語的なトランスパイルになる。 このため、`import type {}`文は丸ごと削除され、`import {a, type B}`のような文は`import {a}`に変換される。 -しかし、このオプションを有効にするとCommon JS向けにトランスパイルする際にもimport文がrequire文に変換されないため非常に面倒になる。 +~~しかし、このオプションを有効にするとCommon JS向けにトランスパイルする際にもimport文がrequire文に変換されないため非常に面倒になる。~~ + +~~これと同等のチェックをESLintのプリセットで行うように設定しているため、TypeScript側ではデフォルト値のままとする。~~ -これと同等のチェックをESLintのプリセットで行うように設定しているため、TypeScript側ではデフォルト値のままとする。 +この設定は TS 5.9 以降、`tsc --init` で生成される推奨設定に含まれていており、CJS 向けのトランスパイルも基本行わない情勢になっているので有効化する。 ## Backwards Compatibility From 58c09b615cd44214c167567e00767fcbafa9856f Mon Sep 17 00:00:00 2001 From: sushichan044 <71284054+sushichan044@users.noreply.github.com> Date: Mon, 28 Jul 2025 00:03:38 +0900 Subject: [PATCH 4/8] changeset for verbatimModuleSyntax --- .changeset/twelve-rice-repeat.md | 5 +++++ 1 file changed, 5 insertions(+) create mode 100644 .changeset/twelve-rice-repeat.md diff --git a/.changeset/twelve-rice-repeat.md b/.changeset/twelve-rice-repeat.md new file mode 100644 index 00000000..fad3a394 --- /dev/null +++ b/.changeset/twelve-rice-repeat.md @@ -0,0 +1,5 @@ +--- +"@virtual-live-lab/tsconfig": major +--- + +feat!: enable verbatimModuleSyntax From a7f26165c2034af442e4613dd58f54b06bfb7bf7 Mon Sep 17 00:00:00 2001 From: sushichan044 <71284054+sushichan044@users.noreply.github.com> Date: Mon, 28 Jul 2025 00:05:24 +0900 Subject: [PATCH 5/8] feat!: enable noUncheckedSideEffectImports --- packages/tsconfig/base.json | 1 + packages/tsconfig/docs/base/compiler-options.md | 2 ++ packages/tsconfig/package.json | 2 +- 3 files changed, 4 insertions(+), 1 deletion(-) diff --git a/packages/tsconfig/base.json b/packages/tsconfig/base.json index 9195bf2a..b389e6aa 100644 --- a/packages/tsconfig/base.json +++ b/packages/tsconfig/base.json @@ -9,6 +9,7 @@ "noPropertyAccessFromIndexSignature": true, "noUncheckedIndexedAccess": true, "exactOptionalPropertyTypes": true, + "noUncheckedSideEffectImports": true, "strict": true, "strictNullChecks": true, // modules diff --git a/packages/tsconfig/docs/base/compiler-options.md b/packages/tsconfig/docs/base/compiler-options.md index 08ba9bcb..40974b6e 100644 --- a/packages/tsconfig/docs/base/compiler-options.md +++ b/packages/tsconfig/docs/base/compiler-options.md @@ -278,6 +278,8 @@ Module Suffixに指定したSuffixを考慮してモジュール解決を行う 安全性が向上するため、有効にしておく。 +補足: 一度 のような事情により無効化されていたが、 TS 5.9 以降この設定は `tsc --init` で生成される推奨設定に含まれていており、十分一般的な設定になっていると判断したため有効化する。 + ### [Paths](https://www.typescriptlang.org/ja/tsconfig/#paths) 設定値: not set diff --git a/packages/tsconfig/package.json b/packages/tsconfig/package.json index a0eeee30..aa368764 100644 --- a/packages/tsconfig/package.json +++ b/packages/tsconfig/package.json @@ -7,7 +7,7 @@ "*.json" ], "peerDependencies": { - "typescript": "^5.0.0" + "typescript": "^5.6.0" }, "devDependencies": { "typescript": "catalog:" From c82c772994182507f10abdaf014c3321b89e8570 Mon Sep 17 00:00:00 2001 From: sushichan044 <71284054+sushichan044@users.noreply.github.com> Date: Mon, 28 Jul 2025 00:05:44 +0900 Subject: [PATCH 6/8] changeset for noUncheckedSideEffectImports --- .changeset/proud-months-repeat.md | 7 +++++++ 1 file changed, 7 insertions(+) create mode 100644 .changeset/proud-months-repeat.md diff --git a/.changeset/proud-months-repeat.md b/.changeset/proud-months-repeat.md new file mode 100644 index 00000000..5d0303cc --- /dev/null +++ b/.changeset/proud-months-repeat.md @@ -0,0 +1,7 @@ +--- +"@virtual-live-lab/tsconfig": major +--- + +feat!: enable noUncheckedSideEffectImports + +Now all presets require TypeScript 5.6 or later. From a1657936d991d31cea768aa0df987fbe170de86c Mon Sep 17 00:00:00 2001 From: Kentaro Suzuki <71284054+sushichan044@users.noreply.github.com> Date: Mon, 28 Jul 2025 20:55:11 +0900 Subject: [PATCH 7/8] Update .changeset/proud-months-repeat.md Co-authored-by: Nanashi. Signed-off-by: Kentaro Suzuki <71284054+sushichan044@users.noreply.github.com> --- .changeset/proud-months-repeat.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.changeset/proud-months-repeat.md b/.changeset/proud-months-repeat.md index 5d0303cc..618b1c74 100644 --- a/.changeset/proud-months-repeat.md +++ b/.changeset/proud-months-repeat.md @@ -4,4 +4,4 @@ feat!: enable noUncheckedSideEffectImports -Now all presets require TypeScript 5.6 or later. +BREAKING CHANGE: Now all presets require TypeScript 5.6 or later. From f47b614c6af444ab538c2a41a9fa42fd8f3d044a Mon Sep 17 00:00:00 2001 From: sushichan044 <71284054+sushichan044@users.noreply.github.com> Date: Mon, 28 Jul 2025 23:43:59 +0900 Subject: [PATCH 8/8] docs: clarify context --- packages/tsconfig/docs/base/compiler-options.md | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/packages/tsconfig/docs/base/compiler-options.md b/packages/tsconfig/docs/base/compiler-options.md index 40974b6e..85e0edfe 100644 --- a/packages/tsconfig/docs/base/compiler-options.md +++ b/packages/tsconfig/docs/base/compiler-options.md @@ -278,7 +278,8 @@ Module Suffixに指定したSuffixを考慮してモジュール解決を行う 安全性が向上するため、有効にしておく。 -補足: 一度 のような事情により無効化されていたが、 TS 5.9 以降この設定は `tsc --init` で生成される推奨設定に含まれていており、十分一般的な設定になっていると判断したため有効化する。 +補足: 一度 で有効化したが、 のような事情により無効化されていた。 +TS 5.9 以降この設定は `tsc --init` で生成される推奨設定に含まれていており、十分一般的な設定になっていると判断したため有効化する。 ### [Paths](https://www.typescriptlang.org/ja/tsconfig/#paths)