1. ホーム
  2. typescript

[解決済み] TypeScriptの円形型参照

2022-02-15 08:20:24

質問

私はtypescriptの初心者で、2つの型の間に循環参照を設定する方法を理解しようとしています。 この参照は完全なコード参照である必要はなく、単にインターフェースだけで、インターフェースは別々のファイルに定義されています。 例えば、私が2つのインターフェースを持っているとします。親と子です。 それらは、親が子のコレクションを持ち、各子が親への参照を持つように、二重にリンクされています(下図参照)。 これらを別々のファイルで定義できるように、インポートや依存関係を設定するにはどうしたらよいでしょうか。

interface Parent {
  children: Child[]
}

interface Child {
  parent: Parent
}

解決方法は?

以下、2つの解決策を紹介します。私は後者の方がNode JSモジュールときれいに連携できるので好きですが、残念ながら私のIDEは(まだ)私ほどには好きではありません...。

リファレンスを使用する

を作成します。 definitions.d.ts このファイルには、クラスやインターフェイスへの参照のみが含まれます。

/// <reference path="Parent.ts" />
/// <reference path="Child.ts" />

Parent.tsChild.ts は、1つの参照を指し示す。 definitions.d.ts ファイル

/// <reference path="definitions.d.ts" />

インポートを使用する...require

を渡す。 --module commonjs フラグを tsc では import なにそれ requireexport 公開したいもの

Parent.ts 内

 import Child = require('Child')

 interface Parent { 
     children: Child[]
 }

 export = Parent

Child.tsにて

 import Parent = require('Parent')
 
 interface Child {
     parent: Parent
 }

 export = Child

で拡張子 '.ts' を指定しないことに注意してください。 require