2016-07-02 18 views
19

私は100の別々のtsファイルのようにTypescriptで大きなライブラリを構築しています。 以前はすべてのクラスについて、エクスポートモジュールXXX(後でエクスポート名前空間XXXに変更)を使用しましたが、これはお勧めの方法ではありません。Typescript 1.8モジュール:フォルダからすべてのファイルをインポート

私はインポートしようとしました。これはうまくいきました:

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

しかし、私は100のファイルを持っているので、私はそれらのすべてにそのような行を追加したくありません。私はすべてのクラスがmylibという変数でアクセスできるようにしたい。

は、だから私はこの試みた:

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

をしかし、私はこれを行うとすぐに、私が取得:はモジュールの./source/」を見つけることができません

がすべてインポートする方法はあります1行に複数のファイルがあるフォルダのクラス?

答えて

28

tscが提供するモジュール解決戦略は、このような動作をサポートしていません。

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

私はあなたがここにノードスタイルのモジュールの解像度を使用していると仮定している、あなたはおそらくので、以下のとおりです。どのようなご希望のimport文

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

が実際にやっていることは、この順序でチェックを実行することですそれは推奨される方法です。 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'; 
.... 
+0

ありがとうございました!私はこのアプローチを適用し始め、別の質問に直面しました:http://stackoverflow.com/questions/38168733/typescript-export-all-functions-in-a-namespace多分あなたはそれに対する答えも知っています:) – zeroin

+1

そして別の関連する質問 - 自分のプロジェクトで、クラスで使用するクラスを1つずつインポートするのではなく、すべてのクラスをインポートできますか(index.d.tsを使用していますか?)またはこれは間違った考えですか? – zeroin

+0

あなたのwebpack/browserifyスクリプト・ローダーがさまざまな構成に対して厳密なソース境界を検出できないため、これはお勧めできません。たとえば、adminモジュールとその依存関係、公開Webサイトおよびその依存関係。あなたはいつもすべてのソースをダウンロードしますが、そのうちのいくつかは特別なページには使われません。 – VadimB

関連する問題