窓を作っては壊していた人のブログ

この謎のブログタイトルの由来を知るものはもういないだろう

TypeScript 3.7.x環境でVSCodeのIntelliSenseが効かなくなることとその対処法

3行まとめ

  • TS 3.7.xで補完が壊れるよ
  • 補完が壊れるのは3.8で直ったよ
  • VSCodeの補完には3.6.xか3.8 Betaを使おう

補完が効かないってどういう状態?

2019年11月にTypeScript 3.7.2がリリースされました。 Optional Chaining と Nullish Coalescingがサポートされて書きやすくなるぞーとウキウキしてVSCodeを開いたのですが、IntelliSenseで補完を出そうとすると

f:id:yamachu_co:20200115075150p:plain
abcって…文字じゃなくてこれは変数名だぞ!

こんな感じで変数の補完が効かなくなります。 そう、変数の補完だけが効かなくなるんです…Objectのプロパティなどの補完は効くという不思議状態。

こんなTweetをした後にもしかしておま環だと恥ずかしいのでチームの人にも色々試してもらったのですが、おま環ではないことが判明。

TypeScript 3.7.2 のリリース日にこんなIssueも立っていました。

TypeScript Server Error (3.7.2) Cannot read property 'symbol' of undefined · Issue #84549 · microsoft/vscode · GitHub

対処法

  1. TypeScript 3.7.xで導入された文法を使わないのであれば補完に3.6.xを使う。
  2. 変数は文字列として補完してくれるので、それで頑張って、プロパティの補完を使う。
  3. TypeScript 3.8.xを補完に使う。

が今の所の解決策となりました。

3の解決策を取るには

JavaScript and TypeScript Nightly - Visual Studio Marketplace

の拡張をインストールする必要があり、割とアグレッシブで人に勧めづらかったのですが

devblogs.microsoft.com

先日3.8 Betaがリリースされたので非常に敷居が下がった気がします。 TypeScript 3.8 Betaをどこかのディレクトリにインストールして、補完に使うTypeScriptのPATHをそこに向けるだけで上記の問題は解決するので、お困りの方はそちらを試してみて下さい。

補完に使うTypeScriptってどうやって向けるの?は公式ドキュメントで言うところの

TypeScript Compiling with Visual Studio Code

です。