「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」らしい(だいぶ古い…)
なるほど…となったので、メモとして残しておく。