あじちゃんの備忘録。

〜ここはメモ帳です

npm で TS2304 (Cannot find name '***') というエラーが出る時の原因と対処

エラー

  • npm -i したらこんなエラーが.
node_modules/@types/superagent/index.d.ts:29:29 - error TS2304: Cannot find name 'Blob'.

29 type MultipartValueSingle = Blob | Buffer | fs.ReadStream | string | boolean | number;
                               ~~~~

node_modules/@types/superagent/index.d.ts:116:14 - error TS2304: Cannot find name 'XMLHttpRequest'.

116         xhr: XMLHttpRequest;
                 ~~~~~~~~~~~~~~

原因

  • それぞれを呼ぶライブラリが足りなかったせい

解決

  • オプション --lib dom を付けてインストールし直すことで,不足している標準ライブラリを一緒にインストールしてくれる
$ npm i --lib dom
npm notice created a lockfile as package-lock.json. You should commit this file.
+ dom@0.0.3
added 1 package and audited 10248 packages in 4.722s
found 0 vulnerabilities

参考

@types/superagent error TS2304: Cannot find name 'XMLHttpRequest'. #12044

dropColumnするつもりでdropしたらテーブルを消そうとしてびっくりした

原因

dropColumn するべきところで drop をしていた.

リファレンス

テーブルリネーム/削除

存在するテーブルを削除する場合は、dropかdropIfExistsメソッドを使います。

コードとエラー

// 正しいコード
Schema::connection($this->connection)->table('tableName', function (Blueprint $table) {
    $table->dropColumn('createdAt');
    $table->dropColumn('updatedAt');
});

// 間違ってるコード
Schema::connection($this->connection)->table('tableName', function (Blueprint $table) {
    $table->drop('createdAt');
    $table->drop('updatedAt');
});
  • エラーの内容
  [Illuminate\Database\QueryException]                                         
  SQLSTATE[42S02]: Base table or view not found: 1051 Unknown table 'databaseName.tableName' doesn't exist
  (SQL: drop table `products`)          

唐突の drop table 😱
エラーにならなかったら恐ろしいことになってしまう.
ここで一番怖いと思ったことが, $table->drop('ココ') で指定しているのがテーブル名でなくカラムなのに $table で指されているテーブルを消そうとしていたこと. 「タイポでした〜😂」じゃすまないっすよ... ちなみに,phpは関数の引数の数が合ってなくても動くので、$table->drop(‘カラム名’) と書いても死なずに $table->drop() と同等の動作をするためこのようなことになったと推測...

今回のエラーの追い方

  1. とりあえず実行して,エラーログを確認( storage/logs/laravel-yyyy-MM-dd.log
  2. エラーが起きているファイルと場所がわかったら,気になる箇所にdumpを入れて実行する
  3. dumpが出なかった手前でエラーが起きているので処理を1つずつ実行して見ていく
  4. 🤔💬 わたしは大体カラム名ミスってるとかメソッド名が違うとかtypoしてるとかが多いので同じようなことをしている他のファイルと見比べたりしながら原因を見つけました.