短くて甘いですが、declareまたはexportを使用して独自のインターフェイスを定義することをお勧めしますか?
// i.something.d.ts
export default interface ISomething {
myValue: string;
}
// something.ts
import ISomething from 'i.something';
export class Something implements ISomething {...}
vs.
// i.something.d.ts
declare interface ISomething {
myValue: string;
}
// something.ts
export class Something implements ISomething {...}
もちろん、独自の別のタイプをインポートする必要がある場合、declareでさえ周囲的に機能しません。 (それを行うためのより良い方法がない限り)
// i.something-else.d.ts
import SomeBiggerThing from '...';
import SomeKindOfType from '...';
declare interface ISomethingElse extends SomeBiggerThing {
myValue: SomeKindOfType;
}
// something-else.ts
// ISomethingElse isn't available unless I import it, because it imports its own stuff.
import ISomethingElse from 'i.something-else';
export class Something implements ISomethingElse {...}
ほとんどの大規模/成熟したTypeScriptライブラリは、アンビエント宣言に依存することを避け、代わりに現在のファイルの外部で再利用する必要があるものをexport
します。たとえば、Angularコードベースにはinterfaces.ts
インターフェースを参照する必要がある各ファイルにインポートされる各モジュールのファイル:
https://github.com/angular/angular/blob/master/packages/http/src/interfaces.ts
これにはいくつかの利点があります。
import
ステートメントを介して明示的に参照されます。import
およびexport
ステートメントに依存していますが、アンビエントタイプのコンテキストはTypeScriptのみの概念です。