node_modules
にモジュールlib
があり、それを使用したいと思っています。このためにlib.d.ts
を書きました。
ファイルは次のようになります。
/src/
main.ts (imports `lib`)
/types/
lib.d.ts
ファイルmain.ts
に次のコードを記述できます。
/// <reference path="../types/lib.d.ts" />
import {some} from 'lib';
そしてそれは機能します。
しかし、アンビエント宣言ファイルにインポートを使用しようとすると:
import '../types/lib';
import {some} from 'lib';
エラーなしでコンパイルされますが、結果のJSでは、このファイルの必要性を見つけることができます。
require('../types/lib');
const lib_1 = require('lib');
ファイル../types/lib
が見つからないというランタイムエラーが発生しました。これは、結果ファイルを含まないアンビエント宣言ファイルです。
コンパイラが* .d.tsファイルのインポートを削除しなかったのはなぜですか?
インポートを何らかの方法で使用できますか、それとも代わりに参照を使用する必要がありますか?
ソリューション:
reference
ディレクティブを使用したくない場合は、必要な* .d.tsをtsconfig.jsonに含まれているファイルに追加するだけです。
私のtsconfig.jsonは:
{
"compilerOptions": {
"module": "commonjs",
"target": "es2015",
"lib": ["es2016"],
"noImplicitAny": true,
"noImplicitReturns": true,
"noImplicitThis": true,
"strictNullChecks": true,
"noFallthroughCasesInSwitch": true,
"noUnusedLocals": true,
"noUnusedParameters": true,
"noEmitOnError": true,
"newLine": "LF",
"forceConsistentCasingInFileNames": true,
"removeComments": true,
"declaration": false,
"sourceMap": false,
"outDir": "../build",
"types": [
"node"
]
},
"files": [
"index.ts"
]
}
早い段階で.d.tsをtypes
セクションに追加しようとしましたが、この場合、tcsはこのファイルをnode_modules/@ typesディレクトリで見つけようとしています。
提案の後、files
セクションにファイルを追加しようとしました:
"files": [
"index.ts",
"types/lib.d.ts"
]
それはうまくいき、良い解決策のようです。
環境定義ファイルをimport
する必要はありません。
手動で/// <reference
できます。しかし、正しい方法は、ファイルtsconfig.json
を介してコンパイラで使用できるようにすることです。
tsconfig.json
以外のものが含まれるnode_modules
の例:
{
"compilerOptions": {
"module": "commonjs",
"target": "es5"
},
"exclude": [
"node_modules"
]
}