5

Animal.tsでTypeScriptを使用して次のクラス定義を想定します。

module Animals
{
    export class Animal { }    
}

別のファイルにDogクラスを作成する場合は、次のコードを使用してDog.tsで言います。

module Animals
{
    export class Dog extends Animal { }
}

「Animal」という名前は現在のスコープに存在しません。これは、クラス定義Dogで発生するエラーです。

Dog.tsに次の行を追加します

/// <reference path="Animal.ts"/>

コンパイルエラーを修正しますが、両方のクラスが同じモジュール内で定義されている場合、なぜこれが必要なのですか?

言い換えると、モジュール宣言がファイル全体に広がり、各クラスまたはインターフェイス定義が独自のファイルに含まれている必要があります。これもベストプラクティスですか?

4

2 に答える 2

6

まず、両方のファイルを一度にコンパイルする場合

tsc Animal.ts Dog.ts

何もかも良くなるだろう。Typescriptファイルをコンパイルするとき、コンパイラはどのファイルが実際にプログラムを構成しているかを認識する必要があります。これは、ソース参照を使用して、///またはすべてのファイルをコンパイラーに提供することによって実行できます。javaこれは、中間表現にコンパイルされCLASSPATH、プログラムの一部である他のファイルを検索する場所の概念があるなどの他の言語とは多少異なります。

于 2012-10-08T18:31:33.533 に答える
2

///参照が必要なのは、コンパイラがAnimalがどこで定義されているかを知る必要があるためです。どこを見ればよいかを指示しないと、どのソースファイルにあるかを知ることはできません。

これ自体がベストプラクティスかどうかはわかりませんが(アプリケーションについて詳しく知る必要があります)、アンチパターンとは思えないので、気軽に実行できると思います。TypeScriptのモジュールは、この種のパターンを可能にするために意図的にオープンエンドになっています。

于 2012-10-08T18:11:15.767 に答える