Apakah masuk akal untuk menggunakan `export` dalam file` d.ts`?

Aug 06 2020

Saya mencoba membuat file untuk jenis yang digunakan secara global di sekitar aplikasi saya.

reduxState.d.ts

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

Dengan kode di atas, saya sudah dapat melihat namespaceanggota saya dan anggotanya tersedia di seluruh file proyek saya.

Lalu apa perbedaan antara kode diatas dan kode berikut yang digunakan exportuntuk namespacemember?

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

Mereka berdua tampaknya bekerja dengan baik. Apa bedanya?

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

Karena kami ingin antarmuka dan kelas di sini terlihat di luar namespace, kami mengawalinya dengan export.

Dalam kutipan dari DOC ini, tampaknya mereka mengacu pada namespaceyang dideklarasikan dalam a tsdan bukan d.tsfile. Itukah sebabnya Anda membutuhkan exportkasus itu?

Apakah masuk akal untuk digunakan exportdalam d.tsfile?

Jawaban

1 Zer0 Aug 06 2020 at 18:50

*.d.tsfile untuk definisi, mereka benar-benar diabaikan pada waktu proses. Jika Anda menulis kode JS karena Anda memiliki perpustakaan atau sesuatu, saya sangat menyarankan menggunakan kata kunci ekspor, karena ini mempermudah pengguna lain untuk melihat apa yang dapat mereka gunakan dari kode Anda (sesuatu yang tidak ekspor, jelas tidak dapat diimpor ke tempat lain).

Sekarang kasus penggunaan Anda: Segala sesuatu yang diekspor dari namepsace, dapat digunakan di luar secara independen. Artinya Anda bisa melakukan sesuatu seperti

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

Karena Anda menggunakan *.d.tsfile dan bukan *.tsfile, tidak akan ada bedanya bagi Anda selama Anda hanya mengekspor antarmuka, karena mereka akan dihilangkan pada waktu kompilasi.

Satu catatan terakhir: *.d.tsFile memungkinkan Anda untuk melihat barang-barang Anda di seluruh proyek Anda tetapi jika Anda berencana untuk mengimpor fungsi atau yang serupa dari sana, Anda perlu mengimpornya terlebih dahulu.