Typescript oluşturmak için d.ts dosyalarını kopyalamıyor

May 07 2019

Yani belki de karıştı, ama ben eklenirse düşündüm ediyorum declaration:truebenim tsconfig.json için o benim kopyalamak tsc olabilir *.d.tskenarı boyunca, dosyaları transpiled kodu & 's d.tsdosyaları?

ÖRNEĞİN:

- src
 - lib
   - types.d.ts
   - foo.ts

Tsc'nin sonucunun şöyle olmasını beklerdim:

- build
 - lib
   - types.d.ts
   - foo.js
   - foo.d.ts

Ancak, types.d.tsyapı dizinime kopyalanacak gibi görünmüyorum .

TypScript .d.tsdosyaları kopyalamak için herhangi bir mekanizma sağlamıyor mu? Yoksa bir yerlerde yanlış bir yapılandırma mı yaşıyorum? (Bu noktada birçok farklı konfigürasyon denedim; hiçbir şey işe yaramıyor gibi görünüyor)

Yanıtlar

25 ford04 Jun 04 2019 at 08:43

Haklısınız - declaration:trueima her verilen yalnızca .tsdosya tsckarşılık gelen üretir ve kopya .d.tsçıktı dosyasını build(ek olarak dizinde .jsve .mapuygulanabilirse). Bu nedenle tsc, özel types.d.tsdosyanızı çıktı dizinine kopyalamayacaktır .

Temel olarak .d.tsdosyalar, derleyicinin tür kontrolleri yapması için dokunulmaz girdi olarak görülür. Herhangi bir çıktı üretimi için kullanılmazlar, yani kopyalanmazlar build. Daha fazlasını okuyabilirsinizhttps://github.com/Microsoft/TypeScript/issues/5112 bakıcıların bakış açısı hakkında:

Kullandığınız .d.ts dosyaları, derleme sistemi için bir girdidir, ancak bir çıktı değildir. Bir .d.ts'den bazı türleri tüketmek, ancak çıktınızın bu türleri kullanmaması son derece mantıklıdır, bu nedenle, derleme sonuçlarınızla girdi .d.ts'yi dağıtmak için hiçbir neden olmaz. [...] İlgili .d.ts dosyalarını ihtiyaç duyduğunuz her yere kopyalamak için oluşturma aracınızda bir derleme sonrası adım isteyeceğiniz anlaşılıyor.

.D.ts dosyaları, derleyicinin onlara dokunmayacağı, onları taşımayacağı veya yeniden oluşturmayacağı "referanslar" olarak kabul edilir. .D.ts dosyalarını düşünmenin kolay bir yolu, .js dosyalarınızla birlikte gitmeleridir. .js dosyalarını kopyalıyorsanız, eşleşen .d.ts dosyalarını kopyalamanız gerekir.

1.Çözüm: d.ts dosyalarını manuel oluşturma adımıyla kopyalayın

Olası bir çözüm, gerekli tüm .d.tsdosyaları types.d.tsbir derleme adımında manuel olarak kopyalamaktır . Somut araç, tercih ve projenize ve diğerlerinin yanı sıra işletim türüne bağımlıdır. Bu araç, srcdosyaları kopyalarken altındaki dizin yapısını korumalıdır build, böylece importtür başvuruları çalışmaya devam eder. Birkaç isim:https://serverfault.com/questions/180853/how-to-copy-file-preserving-directory-path-in-linux(kabuk), rsync, robocopyya da bir platform bağımsız NPM paketi gibihttps://www.npmjs.com/package/copyfiles:

"scripts": {
  "copy-dts": "copyfiles -u 1 \"src/**/*.d.ts\" build"
}

2.Çözüm: d.ts dosyalarını .ts uzantısına yeniden yazın

.d.tsDosyalarınızı .tsuzantıya yeniden yazın (veya türleri mevcut .tsdosyalara yeniden entegre edin ), bu nedenle tscçıktıdaki bildirimleri yayınlamaya özen gösterin . Küçük bir dezavantaj: Türler ve uygulama kodu arasında derleyicinin zorunlu kıldığı bir ayrımınız yoktur ( d.tsdosyaların kod içermesine izin verilmez). En büyük avantajı, ek bir inşa adımına ihtiyacınız olmamasıdır.

Bana göre ikincisi, örneğin npm paketiniz için genel bir API oluşturmak için en kolay yaklaşımdır, oysa bir .d.tsdosya dahili olarak kullanılan ve paylaşılan bir tür bildirimi için aday olabilir.

Umarım yardımcı olur.