「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のバージョンが古いと起こるエラーだけど、今回はtargetをES2023としているので該当しないはず。
なおtscはNodebrew経由のグローバルインストールで、バージョンは5.9.2。わたし自身はTypeScriptをあまり書かないので、全然詳しくない。
tsc --showConfigをするとちゃんと読み込めている。jsonの構文も問題ない。検索してもtargetのバージョンが古いという記事しか出てこない。どうにもならなくなって、最終手段でChatGPTくんに聞いた。
結論としては、以下が正解だった。
tsc --project tsconfig.json test.tsファイルの指定はなくてもいい(ないほうが一般的? / あると後述の「プロジェクトモード」でファイル単体が実行される)
tsconfig.jsonの指定はカレントのディレクトリから見たパスを指定する(../tsconfig.jsonなど)
ChatGPTくんいわく、「プロジェクトモード(tsconfigをベースにコンパイル)」と「シングルファイルモード(ほぼデフォルト設定、tsconfigの多くを無視)」というのがあり、tscに続けてすぐファイル名を渡してしまうと「シングルファイルモード」として実行されるとのこと。このときのtargetやlibのデフォルトは「ES3」らしい(だいぶ古い…)
なるほど…となったので、メモとして残しておく。