web-dev-qa-db-ja.com

Typescript 1.8モジュール:フォルダーからすべてのファイルをインポート

TypeScriptを使用して、100個の個別のtsファイルを含む大きなライブラリを構築しています。以前はすべてのクラスでexport module XXXexport namespace XXX laterに改名)を使用しましたが、本が言うように、これは推奨される方法ではなく、代わりにimportを使用する必要があります。

そこでインポートを試みました。これはうまくいきました:

import * as mylib from "./source/source.ts";

しかし、100個のファイルがあるので、すべてのファイルにこのような行を追加したくありません。そして、mylib変数を介してすべてのクラスにアクセスできるようにします。

だから私はこれを試しました:

import * as mylib from "./source/";

しかし、これを行うとすぐに、次のようになります。モジュール './source/'が見つかりません

1行で複数のファイルを含むフォルダーからすべてのクラスをインポートする方法はありますか?

26
zeroin

Tscが提供する両方のモジュール解決戦略は、このような動作をサポートしていません。希望するインポートステートメント

import * as mylib from "./source/";

実際に行っているのは、次の順序でチェックを実行することです。

1. (does package.json have a typings key? If so, import this file)
2. import * as mylib from "./source/index.ts";
3. import * as mylib from "./source/index.tsx";
4. import * as mylib from "./source/index.d.ts";

ここではノードスタイルのモジュール解決を使用していると想定していますが、これはおそらく推奨される方法であるためです。 TypeScriptでのモジュール解決の詳細については、 TypeScript docs を確認してください。

通常、達成しようとしているのはindex.d.tsファイルを作成することです。このファイルは、残りのモジュールをエクスポートするエントリポイントとして機能します。例としてangular2を使用しています:一般的なangular2のインポートは次のようになります:

import { Injectable } from '@angular/core'

coreは、@angularディレクトリ内にある単なるディレクトリです。 sourceディレクトリと同じです。ただし、コアディレクトリにはindex.d.tsファイルがあります。

/**
 * @module
 * @description
 * Starting point to import all public core APIs.
 */
export * from './src/metadata';
export * from './src/util';
export * from './src/di';
....
32
Georg Grab