TypeScriptの変数定義時のコンパイルエラー :ブロック スコープの変数 ‘hoge’ を再宣言することはできません。ts(2451)

以下のような2つのファイルがあるとき、

a.ts

const a = 1;
console.log(a);

b.ts

const a = 1;
console.log(a);

ブロック スコープの変数 ‘a’ を再宣言することはできません。ts(2451)」みたいなエラーが出る問題。

英語だと「Cannot redeclare block-scoped variable ‘a’.ts(2451)」みたいなエラーです。

このエラーは、tsconfig.jsonで以下のように書くと解決できますが

"moduleDetection": "force", 

そもそもファイルを「スクリプト」ではなく「モジュール」として扱うようにすれば、勝手にブロックスコープが生成されて「この変数aは別物だね」とできます。

たとえば、import文やexport文を使うと勝手にモジュールとして扱われるようになります。

そして一般的なプログラミングで、import文やexport文を使わずにコードを書くのは稀なので、気にしなくて良いと思います。

ちなみにexport {};を追加すると、強制的にモジュールとして扱うこともできます。その場合"moduleDetection": "force" は不要です。

おわり

コメント

タイトルとURLをコピーしました