Cannot find name の原因と直し方
宣言されていない変数・関数名を参照したときに出るエラーです。TypeScriptは近い名前が見つかると「Did you mean 'x'?」という候補も一緒に表示してくれます。
エラーメッセージの読み方
main.ts(2,13): error TS2552: Cannot find name 'totall'. Did you mean 'total'?
main.ts- ファイル名
2- 行番号
13- 列番号 — この位置でtscが検査に失敗しました
TS2552- エラーコード — 検索するとTypeScriptの解説が見つかります
Cannot find name 'totall'. Did you mean 'total'?- 内容 — 期待していたもの、または受け付けられなかったもの
このエラーが出る典型パターン
パターン1
1 const total: number = 100; 2 console.log(totall); ^
main.ts(2,13): error TS2552: Cannot find name 'totall'. Did you mean 'total'?
変数名のスペルミスです。宣言したtotalと1文字違うだけで、別の名前として扱われます。
直し方: totall を total にします。
広告
広告スロット(未設定)
パターン2
1 function square(n: number): number { 2 return n * n; 3 } 4 console.log(squre (4)); ^
main.ts(4,13): error TS2552: Cannot find name 'squre'. Did you mean 'square'?
関数名のスペルミスです。定義したsquareと違う名前を呼び出そうとしています。
直し方: squre を square にします。
パターン3
1 const userName: string = "Al"; 2 console.log(`Hello, ${usrName }`); ^
main.ts(2,23): error TS2552: Cannot find name 'usrName'. Did you mean 'userName'?
テンプレートリテラルの中でも変数名のタイプミスは同じようにチェックされます。
直し方: usrName を userName にします。
よくある誤解
JavaScriptのReferenceErrorと違い、TypeScriptではこの種のタイプミスは実行前のコンパイル段階で検出されます。実行してから気づくのではなく、tscを通した時点で発覚します。
まとめ
Cannot find nameは初級でつまずきやすい項目です。上の3パターンを実際に手で直すと、エラーメッセージのどこを読めばよいかが掴めます。