「TS18028: Private identifiers are only available when targeting ECMAScript 2015 and higher.」の解消

この記事のコードをtsc test.tsとして実行しようとすると、「TS18028: Private identifiers are only available when targeting ECMAScript 2015 and higher.」というエラーに遭遇した。

これ自体は#privateなど新しい記法を使用している際にtsconfig.jsonで指定しているtargetのバージョンが古いと起こるエラーだけど、今回はtargetES2023としているので該当しないはず。
なおtscはNodebrew経由のグローバルインストールで、バージョンは5.9.2。わたし自身はTypeScriptをあまり書かないので、全然詳しくない。

tsc --showConfigをするとちゃんと読み込めている。jsonの構文も問題ない。検索してもtargetのバージョンが古いという記事しか出てこない。どうにもならなくなって、最終手段でChatGPTくんに聞いた。

結論としては、以下が正解だった。

Terminal window
tsc --project tsconfig.json test.ts

ファイルの指定はなくてもいい(ないほうが一般的? / あると後述の「プロジェクトモード」でファイル単体が実行される)
tsconfig.jsonの指定はカレントのディレクトリから見たパスを指定する(../tsconfig.jsonなど)

ChatGPTくんいわく、「プロジェクトモード(tsconfigをベースにコンパイル)」と「シングルファイルモード(ほぼデフォルト設定、tsconfigの多くを無視)」というのがあり、tscに続けてすぐファイル名を渡してしまうと「シングルファイルモード」として実行されるとのこと。このときのtargetlibのデフォルトは「ES3」らしい(だいぶ古い…)

なるほど…となったので、メモとして残しておく。