私は循環参照を持つ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
ディレクティブを使用しても参照できなくなります。
循環参照と外部モジュールを可能にする良いプロジェクト構造は何ですか?
編集:両方のクラスを同じファイルに配置することは、私が望むものとまったく同じです。クラスごとに別々のファイルを保持しながら同じことを達成する方法はありますか?
循環参照の問題は何ですか?私は定型コードをたくさん追加しないようにしたい。 – Toast
私の場合、親クラスはそのサブクラスを参照しています。 – Toast
円形ソリューションはスケーリング可能ではなく、ツーリングやIDESではサポートされていません。循環参照を避けることが知られている他の多くの構成パターンや構造パターンが存在します(ガンマヘルム・ジョンソンとVlissidesの意味で)。コンポジットパターンやファサードパターンなど。 –