web-dev-qa-db-ja.com

* .d.tsを要求する代わりにインポートできますか?

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"
    ]

それはうまくいき、良い解決策のようです。

9
Avol

環境定義ファイルをimportする必要はありません。

手動で/// <referenceできます。しかし、正しい方法は、ファイルtsconfig.jsonを介してコンパイラで使用できるようにすることです。

tsconfig.json以外のものが含まれるnode_modulesの例:

{
    "compilerOptions": {
        "module": "commonjs",
        "target": "es5"
    },
    "exclude": [
        "node_modules"
    ]
}

tsconfig.jsonのドキュメントはこちら

6
Paleo