Cannot assign to because it is a constant の原因と直し方
constで宣言した変数に再代入しようとしたときに出るエラーです。JavaScriptでは実行時のTypeErrorでしたが、TypeScriptは実行前のコンパイル段階でこれを検出します。
エラーメッセージの読み方
main.ts(2,1): error TS2588: Cannot assign to 'count' because it is a constant.
main.ts- ファイル名
2- 行番号
1- 列番号 — この位置でtscが検査に失敗しました
TS2588- エラーコード — 検索するとTypeScriptの解説が見つかります
Cannot assign to 'count' because it is a constant.- 内容 — 期待していたもの、または受け付けられなかったもの
このエラーが出る典型パターン
パターン1
1 const count = 5; 2 count = 6; ^ 3 console.log(count);
main.ts(2,1): error TS2588: Cannot assign to 'count' because it is a constant.
countはconstで宣言されているため再代入できません。値を変えたい場合はletで宣言します。
直し方: count を let dummy にします。
広告
広告スロット(未設定)
パターン2
1 const MAX = 100; 2 function raiseLimit() { 3 MAX = 200; ^ 4 } 5 raiseLimit(); 6 console.log(MAX);
main.ts(3,3): error TS2588: Cannot assign to 'MAX' because it is a constant.
MAXはconstです。関数の中からであっても再代入は許されません。
直し方: MAX を let dummy にします。
パターン3
1 const name = "Al"; 2 name = "Bob"; ^ 3 console.log(name);
main.ts(2,1): error TS2588: Cannot assign to 'name' because it is a constant.
nameはconstで宣言した変数です。別の値を代入し直すことはできません。
直し方: name を let dummy にします。
よくある誤解
JavaScriptの経験がある人は「これは実行時エラーのはず」と考えがちですが、TypeScriptでは同じ間違いがコンパイルエラーに格上げされます。実行する前に、tscを通した時点で気づけます。
まとめ
Cannot assign to because it is a constantは初級でつまずきやすい項目です。上の3パターンを実際に手で直すと、エラーメッセージのどこを読めばよいかが掴めます。