Ketik tidak menyalin file d.ts untuk membangun
Jadi mungkin saya bingung, tetapi saya pikir jika saya menambahkan declaration:trueke tsconfig.json saya, saya dapat membuatnya tsc menyalin *.d.tsfile saya , di samping kode transparan & d.tsfile itu?
MISALNYA:
- src
- lib
- types.d.ts
- foo.ts
Saya berharap hasil dari tsc menjadi seperti:
- build
- lib
- types.d.ts
- foo.js
- foo.d.ts
Namun, sepertinya saya tidak types.d.tsdapat disalin ke direktori build saya.
Apakah skrip ketikan tidak menyediakan mekanisme untuk menyalin .d.tsfile? Atau apakah saya hanya mengalami kesalahan konfigurasi di suatu tempat? (Saya sudah mencoba banyak konfigurasi berbeda pada saat ini; sepertinya tidak ada yang berhasil)
Jawaban
Anda benar - declaration:truemenyiratkan bahwa hanya untuk setiap .tsfile yang diberikan tscmenghasilkan dan menyalin .d.tsfile output yang sesuai ke builddirektori (sebagai tambahan .jsdan .mapjika berlaku). Jadi tsctidak akan menyalin types.d.tsfile kustom Anda ke direktori output.
Pada dasarnya .d.tsfile dilihat sebagai input yang tidak tersentuh bagi kompilator untuk melakukan pemeriksaan jenis. Mereka tidak digunakan untuk setiap pembangkitan keluaran, yang juga berarti, mereka tidak disalin ke build. Anda dapat membaca lebih lanjuthttps://github.com/Microsoft/TypeScript/issues/5112 tentang sudut pandang pengelola:
File .d.ts yang Anda gunakan adalah input ke sistem build tetapi bukan output. Sangat masuk akal untuk menggunakan beberapa jenis dari .d.ts tetapi keluaran Anda tidak menggunakan jenis tersebut, jadi tidak ada alasan untuk mendistribusikan masukan .d.ts dengan hasil build Anda. [...] Sepertinya Anda menginginkan langkah pasca-pembuatan di alat build Anda untuk menyalin file .d.ts yang relevan di mana pun Anda membutuhkannya.
File .d.ts dianggap sebagai "referensi" yang tidak akan disentuh oleh kompilator, tidak dipindahkan, atau dibuat ulang. Cara mudah untuk memikirkan file .d.ts adalah dengan file .js Anda. jika Anda menyalin file .js, Anda harus menyalin .d.ts yang cocok.
Solusi # 1: Salin file d.ts melalui langkah pembuatan manual
Solusi yang mungkin adalah menyalin semua .d.tsfile yang diperlukan seperti types.d.tssecara manual dalam langkah pembuatan. Alat konkret adalah preferensi dan ketergantungan pada proyek dan jenis build Anda, OS antara lain. Alat ini harus mempertahankan struktur direktori srcsaat menyalin file ke build, sehingga importreferensi jenis tetap berfungsi. Beberapa di antaranya:https://serverfault.com/questions/180853/how-to-copy-file-preserving-directory-path-in-linux(shell), rsync, robocopyatau platform independen paket NPM sepertihttps://www.npmjs.com/package/copyfiles:
"scripts": {
"copy-dts": "copyfiles -u 1 \"src/**/*.d.ts\" build"
}
Solusi # 2: Reword file d.ts ke ekstensi .ts
Tulis ulang .d.tsfile Anda ke .tsekstensi (atau integrasikan ulang jenisnya ke dalam .tsfile yang ada ), jadi tscberhati-hatilah saat mengeluarkan deklarasi di output. Sedikit kerugian: Anda tidak memiliki kompilator yang memaksakan pemisahan antara tipe dan kode implementasi ( d.tsfile tidak diperbolehkan berisi kode). Keuntungan besarnya adalah, Anda tidak memerlukan langkah pembuatan tambahan.
Menurut pendapat saya, yang terakhir adalah pendekatan termudah untuk menghasilkan API publik misalnya untuk paket npm Anda, sedangkan .d.tsfile dapat membuat kandidat untuk deklarasi tipe yang digunakan dan digunakan secara internal.
Semoga membantu.