`d.ts`ファイル内で` export`を使用することは意味がありますか?

Aug 06 2020

アプリでグローバルに使用されているタイプのファイルを作成しようとしています。

reduxState.d.ts

declare namespace MyProject {
  type Type1 = someType;
  interface SomeInterface {
    someProperty: someType
  }
}

上記のコードをnamespace使用すると、プロジェクトファイル全体で自分とそのメンバーが利用可能になっていることがわかります。

では、上記のコードexportと、namespaceメンバーに使用する次のコードの違いは何ですか?

declare namespace MyProject {
  export type Type1 = someType;
  export interface SomeInterface {
    someProperty: someType
  }
}

どちらも問題なく動作しているようです。違いはなんですか?

から: https://www.typescriptlang.org/docs/handbook/namespaces.html#namespacing

ここでのインターフェースとクラスを名前空間の外部表示したいので、それらの前にexportを付けます。

このDOCからの抜粋では、ファイルではなく、namespace内で宣言されているを参照しているtsようd.tsです。exportその場合、それが必要なのはそのためですか?

ファイルexport内で使用することはまったく意味がありd.tsますか?

回答

1 Zer0 Aug 06 2020 at 18:50

*.d.tsファイルは定義用であり、実行時に完全に無視されます。ライブラリなどがあるためにJSコードを作成する場合は、exportキーワードを使用することを強くお勧めします。これにより、他のユーザーがコードから何を使用できるか(自分では使用できないもの)を簡単に確認できるようになります。エクスポート、明らかに他の場所にインポートすることはできません)。

今あなたのユースケース:namepsaceからエクスポートされたものはすべて、外部で独立して使用できます。つまり、あなたは次のようなことをすることができます

const obj: MyProject.SomeInterface = { someProperty: 20 };

*.d.tsファイルではなく*.tsファイルを使用しているので、インターフェイスをエクスポートするだけであれば、コンパイル時に省略されるため、違いはありません。

最後にもう1つ注意してください。*.d.tsファイルを使用すると、プロジェクト全体で自分のものを確認できますが、そこから関数または類似のものをインポートする場合は、最初にそれらをインポートする必要があります。