🧐
rxjsでdeclaration fileがないというエラーが出たことで、VSCodeをバージョンアップする羽目になった
エラー内容
error TS7016: Could not find a declaration file for module 'rxjs'. '/node_modules/rxjs/dist/cjs/index.js' implicitly has an 'any' type.
Try `npm i --save-dev @types/rxjs` if it exists or add a new declaration (.d.ts) file containing `declare module 'rxjs';`
原因
エラーを吐いているのはVSCode。
以下に記載の通り、rxjsのv7以上ではTypeScriptのバージョンが4.2以上でないとコンパイラエラーが出るとのこと。
VSCodeが利用しているTypeScriptのバージョンが4.1.3だったためエラーが出力されていることがわかった。
VSCodeのTypeScriptのバージョンについて
VSCodeには最新の安定版が同梱されている。
これが更新されていないようなので原因を調査した。
VSCodeのバージョンの更新
VSCodeのバージョンを調べると1.46から更新されていなかった。
手動で更新しようとすると以下のエラーが記載されたトーストが出力される。
Cannot update while running on a read-only volume.
調べると、利用しているMac内にApplicationsフォルダが複数存在[1]した。
本来のApplicationsフォルダは/Applications
だが、~/Applications
が存在しており、ここにVSCodeが置かれていた。
そこで、これを本来の/Applications
直下に移動したが、この時点では上記のエラーは解消しなかった。
そこでVSCodeのissueのコメントに記載されているように以下のコマンドを実行する。
sudo chown -R $USER ~/Library/Caches/com.microsoft.VSCode.ShipIt
xattr -dr com.apple.quarantine /Applications/Visual\ Studio\ Code.app
まず一つ目のコマンドでvscode.ShipIt
の権限を変更している。
vscode.ShipIt
はVSCodeのアップデートに関して以下の役割を担っている内部ツールである。
- アップデートパッケージをダウンロードし、インストールプロセスを開始する
- アップデートが中断された場合に再開できるようにしたり、アップデートをスケジュールするなど、アップデートプロセスを制御する
- アップデート後にVisual Studio Codeが正常に起動するかどうかを確認したり、アップデートに伴って変更された設定を反映させる
次に二つ目のコマンドで、VSCodeからcom.apple.quarantine
属性[2]を削除[3]している。
結果
上記を実行してVSCodeを再起動したところ、無事にVSCodeのTypeScriptのバージョンが最新の安定版になり、rxjsのエラーが解消された。
Discussion