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 にします。
パターン4
1 const price: number = 50; 2 console.log(pirce); ^
main.ts(2,13): error TS2552: Cannot find name 'pirce'. Did you mean 'price'?
変数名のスペルミスです。宣言したpriceと違う名前になっています。
直し方: pirce を price にします。
パターン5
1 function cube(n: number): number { 2 return n * n * n; 3 } 4 console.log(cub (2)); ^
main.ts(4,13): error TS2552: Cannot find name 'cub'. Did you mean 'cube'?
関数名のスペルミスです。定義したcubeと違う名前を呼び出しています。
直し方: cub を cube にします。
よくある誤解
JavaScriptのReferenceErrorと違い、TypeScriptではこの種のタイプミスは実行前のコンパイル段階で検出されます。実行してから気づくのではなく、tscを通した時点で発覚します。
実務での勘所
エディタ上でこのミスに赤い波線ですぐ気づけるのは偶然ではありません。TypeScriptは、tscというコマンドラインのコンパイラと、VS Codeなどのエディタが使う言語サービス(Language Service)が、同じ1つの実装を共有するように設計されています。多くの言語では「エディタの補完・警告」と「実際のビルドで使われるコンパイラ」が別々のツールで判定がずれることがありますが、TypeScriptではこの2つが常に同じ結果を返します。