IntelliJでTypeScriptの型補完などが効かなかったときは、とりあえずキャッシュを消して再起動してみよう

こんにちは。 エキサイト株式会社の三浦です。

今回は、表題のとおりですが、とりあえずIntelliJで不具合があったときはキャッシュを消して再起動してみると直るかもしれない、という話になります。

順を追って話していきます。

何が起きたか

以下のコードは、 Next.jsのデフォルトコードです。

// Next.js API route support: https://nextjs.org/docs/api-routes/introduction
import type { NextApiRequest, NextApiResponse } from 'next';

type Data = {
  name: string;
};

export default function handler(req: NextApiRequest, res: NextApiResponse<Data>) {
  res.status(200).json({ name: 'John Doe' });
}

このコードにアクセスがきたら、ステータスコードは200を返しつつボディとして

{ name: 'John Doe' }

を返す、というシンプルなものです。

TypeScriptで作られたものであり、例えば res という引数は NextApiResponse<Data> と厳密に型が指定されているためコード補完が効くはずなのですが、IntelliJでこのコードを開いたとき、なぜか補完が効かないようになっていました。

  // resの型である NextApiResponse に存在するプロパティを参照しようとしても、コード補完されない
  res.status(200).json({ name: 'John Doe' });

色々調べてみてもIntelliJ側での対応策は見つけられず、またNext.jsのデフォルトコードなのでコード自体が間違っている可能性も低い状況でした。

そしていよいよ手詰まりになり、「再起動してみるか…」とキャッシュ等を削除して再起動した結果、補完が効くようになりました

キャッシュの破棄画面

結論

IntelliJはそれなりにキャッシュを使っていたりするので、場合によってはそれが悪さをする場合があります。

なにかおかしな挙動があったら、とりあえず最初に「キャッシュを削除して再起動」を試してみると良いかもしれません。