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 パッケージだ、ということのようです。