TypeScript で error TS2307: Cannot find module ‘fs’. が表示された時に、@types/node パッケージをインストールすると解決されました。[2020]

Node.jsには、あらかじめたくさんの便利なモジュールが用意されています。

ファイルシステム(File System)を扱う fs モジュールもその一つです。

TypeScriptで、このNode.jsが提供するモジュールを扱うには、@types/nodeが必要なようです。

@types/node パッケージ を追加するには以下のコマンドを実行します。

npm install --save-dev @types/node

もっと詳しく

TypeScript で、ちょっとした便利プログラムを書いてみようと思い、以下のコマンドを順に実行して、toolフォルダを新しくつくりました。

TypeScriptモジュールがインストールされ、空のindex.tsファイルを作成しました。

mkdir tool
cd tool
npm init -y 
npm install typescript
touch index.ts

index.tsファイルは、もともと空っぽなので、テキストエディタを使って、以下の記述を行い、保存しました。

import * as fs from 'fs';
fs.writeFileSync('a.txt', 'b')

その後、以下のコマンドでコンパイルをします。

npx tsc index.ts 

この段階で、エラーが発生してしまいました。

発生したエラーは次のとおり

index.ts:1:21 - error TS2307: Cannot find module 'fs'.


1 import * as fs from 'fs';
                      ~~~~




Found 1 error.

本来ならばindex.jsファイルが自動的に作成されるはずが、このエラーのため、作成されませんでした。

fs モジュールが見つからないという内容のエラーです。

fs モジュールはNode.jsにもともと同梱されているモジュールで、JavaScriptで記述を行うときには、特に何も準備することなく使用できていました。

ところが、TypeScriptに記述を行うためには、専用の定義ファイルが必要になるようです。

そこで、前述の以下のコマンドを実行します。

npm install --save-dev @types/node

その後、もういちどコンパイル動作を試します。

npx tsc index.ts 

すると、無事index.jsファルをが作成されます。

作成されたindex.jsファイルをnodeコマンドで実行してみましょう。

node index.js

すると、a.txtファイルが作成され、文字列「b」が書き込まれていれば目的通りです。

Node.jsがどんな標準ライブラリを持っているのかを、TypeScriptは知らなかったのですね。それを教えてあげるのが @types/node パッケージだ、ということのようです。