🧐

rxjsでdeclaration fileがないというエラーが出たことで、VSCodeをバージョンアップする羽目になった

2023/04/30に公開

エラー内容

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以上でないとコンパイラエラーが出るとのこと。

https://github.com/ReactiveX/rxjs/issues/6822

VSCodeが利用しているTypeScriptのバージョンが4.1.3だったためエラーが出力されていることがわかった。

VSCodeのTypeScriptのバージョンについて

VSCodeには最新の安定版が同梱されている。

https://code.visualstudio.com/docs/typescript/typescript-compiling#_using-newer-typescript-versions

これが更新されていないようなので原因を調査した。

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のエラーが解消された。

脚注
  1. 以前利用していたMacからデータ移行する時になんかミスったのかも、、 ↩︎

  2. ダウンロードしたアプリケーションやファイルに付与される拡張属性で、ダウンロード元の情報やダウンロード日時、ダウンロード元の証明書などが格納されている。 ↩︎

  3. xattrコマンドは、macOSの拡張属性(extended attributes)を扱うためのコマンド。com.apple.quarantine属性を削除すると、macOSがダウンロード元を確認できなくなるため、セキュリティ上のリスクが生じる可能性があるため注意が必要。 ↩︎

Discussion