2017-10-31 21 views
-1

私は循環参照を持つtypescriptプロジェクトを持っています。クラスAはクラスBを参照し、クラスBはクラスAを参照します。さらに、exportステートメントを含む外部モジュールがあります。私はこれらを変更することはできません。循環参照とインポートされたモジュールをTypescriptで受け入れる

アプローチ1

使用import文:

import { ClassName } from './path/to/the/file'; 

これは、循環参照を許可していません。循環参照を避けるためにコードを書き直すことは私の選択肢ではありません。

アプローチ2

このようなプロジェクト内のすべてのファイルを参照する1つのdefinitions.d.tsファイル持っている:すべてのコードファイル内の定義ファイルは、同じように参照され、その後

/// <reference path="path/to/the/file"/> 

を。

この解決策は、循環参照を可能にするようです。しかし、exportステートメントの外部モジュールファイルはこのように参照することはできませんので、importステートメントを使用する必要があります。問題は、ファイルがimportステートメントを使用すると、それもモジュールになるようで、/// <referenceディレクティブを使用しても参照できなくなります。

循環参照と外部モジュールを可能にする良いプロジェクト構造は何ですか?

編集:両方のクラスを同じファイルに配置することは、私が望むものとまったく同じです。クラスごとに別々のファイルを保持しながら同じことを達成する方法はありますか?

答えて

-1

循環参照を避ける必要があります。多くの良いオプションと多くの問題はありません。それを行う方法は、クラスAとクラスBを含むクラスCを作成し、AとBの内部参照を避け、クラスCで混合機能を実装することです。

+0

循環参照の問題は何ですか?私は定型コードをたくさん追加しないようにしたい。 – Toast

+0

私の場合、親クラスはそのサブクラスを参照しています。 – Toast

+0

円形ソリューションはスケーリング可能ではなく、ツーリングやIDESではサポートされていません。循環参照を避けることが知られている他の多くの構成パターンや構造パターンが存在します(ガンマヘルム・ジョンソンとVlissidesの意味で)。コンポジットパターンやファサードパターンなど。 –