TypeScript の require エラー解決
TypeScript エラー TS2304: "require" という名前が見つかりません
エラーの背景
TypeScript は JavaScript のスーパーセットであり、静的型付けの機能を提供します。これは、変数や関数に型を指定することで、コンパイル時にエラーを検出するのに役立ちます。
Node.js では、require
関数を使用してモジュールをインポートします。しかし、TypeScript はデフォルトではこの関数を知りません。そのため、モジュールをインポートする際に、TypeScript に require
関数の存在を知らせる必要があります。
解決方法
-
DefinitelyTyped の使用
DefinitelyTyped は、TypeScript でさまざまな JavaScript ライブラリやモジュールを使用するための型定義ファイルを提供するプロジェクトです。Node.js の
require
関数についても、型定義ファイルが提供されています。手順
npm install --save-dev @types/node
を実行して、Node.js の型定義ファイルをインストールします。- TypeScript コンパイラが
@types
ディレクトリを検索するように設定します。
-
モジュール解決戦略の変更
TypeScript のモジュール解決戦略を変更して、Node.js のモジュール解決ルールに従うようにすることもできます。
tsconfig.json
ファイルのcompilerOptions
セクションにmoduleResolution
プロパティを追加し、値を"node"
に設定します。
例
// tsconfig.json
{
"compilerOptions": {
"moduleResolution": "node"
}
}
// index.ts
import express from 'express';
const app = express();
app.get('/', (req, res) => {
res.send('Hello, world!');
});
app.listen(3000, () => {
console.log('Server listening on port 3000');
});
この例では、express
モジュールをインポートするために require
関数を使用しています。tsconfig.json
の moduleResolution
を "node"
に設定することで、TypeScript は Node.js のモジュール解決ルールに従い、require
関数を認識します。
// tsconfig.json
{
"compilerOptions": {
"moduleResolution": "node"
}
}
// index.ts
import express from 'express';
const app = express();
app.get('/', (req, res) => {
res.send('Hello, world!');
});
app.listen(3000, () => {
console.log('Server listening on port 3000');
});
-
ES Modules (ESM) の使用
ES Modules (ESM) は、JavaScript の新しいモジュールシステムです。TypeScript は ESM をサポートしており、
import
ステートメントを使用してモジュールをインポートすることができます。import
ステートメントを使用してモジュールをインポートします。
// tsconfig.json
{
"compilerOptions": {
"module": "esnext"
}
}
// index.ts
import express from 'express';
const app = express();
app.get('/', (req, res) => {
res.send('Hello, world!');
});
app.listen(3000, () => {
console.log('Server listening on port 3000');
});
node.js typescript definitelytyped