Jenis Literal Templat TypeScript Membolehkan Inferens Protobuf Tanpa Penjanaan Kod, Tetapi Pada Kos Apa?

BigGo Editorial Team
Jenis Literal Templat TypeScript Membolehkan Inferens Protobuf Tanpa Penjanaan Kod, Tetapi Pada Kos Apa?

Komuniti pembangun sedang hangat membincangkan tentang perpustakaan bukti konsep baharu yang dipanggil protobuf-ts-types yang memanfaatkan jenis literal templat TypeScript untuk membuat inferens jenis TypeScript daripada definisi mesej Protocol Buffer (protobuf) tanpa penjanaan kod. Walaupun secara teknikal mengagumkan, pendekatan ini telah mencetuskan perbahasan tentang implikasi praktikal dalam menolak sistem jenis TypeScript ke tahap maksimum.

Sistem Jenis TypeScript sebagai Pengurai

Perpustakaan ini, yang dicipta oleh pembangun Nathan Leung, menggunakan jenis literal templat TypeScript untuk mengurai definisi mesej protobuf secara langsung dalam sistem jenis. Pendekatan ini menghapuskan keperluan untuk langkah penjanaan kod berasingan yang biasanya diperlukan ketika bekerja dengan protobuf. Pelaksanaannya sangat ringkas, dengan seorang pengulas menyatakan, Fakta bahawa sumbernya sangat kecil adalah luar biasa. Saya menjangkakan perpustakaan penguraian yang besar dan rumit yang dilaksanakan dalam jenis.

Apa yang menjadikan pendekatan ini sangat menarik adalah bagaimana ia menunjukkan keupayaan sistem jenis TypeScript yang semakin berkembang. Perpustakaan ini pada asasnya melaksanakan pengurai sepenuhnya dalam sistem jenis TypeScript, menunjukkan bagaimana jenis literal templat boleh digunakan untuk manipulasi rentetan yang kompleks pada tahap jenis.

Kebimbangan Prestasi dan Aplikasi Praktikal

Walaupun pencapaian teknikal ini mengagumkan, ramai pembangun menyuarakan kebimbangan tentang aplikasi praktikal pendekatan sedemikian. Isu utama yang dibangkitkan dalam perbincangan adalah kesan prestasi pada masa kompilasi dan pengalaman pembangun.

Sangat mengagumkan betapa fleksibelnya jenis literal templat, tetapi saya tidak dapat membayangkan mahu mempunyai jenis kerenah seperti ini dalam aplikasi pengeluaran yang melambatkan masa kompilasi.

Sentimen ini disuarakan oleh beberapa pengulas yang bimbang tentang responsif IDE dan prestasi pembinaan apabila menggunakan operasi tahap jenis yang kompleks dalam projek dunia sebenar. Walaupun contoh kecil mungkin berfungsi dengan baik, beberapa pembangun menyatakan bahawa dalam pangkalan kod yang lebih besar, pendekatan ini boleh menurunkan pengalaman pembangunan dengan ketara.

Batasan dan Pendekatan Alternatif

Perpustakaan ini mempunyai beberapa batasan yang ketara. Ia kini tidak menyokong perkhidmatan, RPC, medan oneof, medan peta, atau import dari fail proto lain. Selain itu, ia memerlukan rentetan proto dalam talian dalam kod TypeScript, yang mewujudkan cabaran untuk mengekalkan definisi proto merentasi pelbagai bahasa.

Ramai pembangun dalam perbincangan mencadangkan bahawa pendekatan penjanaan kod tradisional mungkin masih lebih baik untuk kegunaan pengeluaran. Alat penjanaan kod mencipta jenis TypeScript statik yang lebih mudah diproses oleh IDE dan tidak memerlukan pengiraan tahap jenis yang kompleks semasa pembangunan.

Beberapa pengulas juga menyatakan bahawa untuk projek yang hanya menggunakan TypeScript, menentukan jenis secara langsung dalam TypeScript mungkin lebih mudah daripada menggunakan protobuf sama sekali, dengan seorang menyatakan mereka lebih suka menentukan jenis dalam TypeScript dan menjana proto daripadanya, kerana sistem jenis TypeScript jauh lebih berkuasa daripada sistem Protobuf.

Batasan Utama protobuf-ts-types

  • Tiada sokongan untuk service dan rpc (hanya message)
  • Tiada sokongan untuk medan oneof dan map
  • Tiada sokongan untuk import antara fail proto
  • Memerlukan rentetan proto dalam talian dalam kod TypeScript
  • Mungkin memberi kesan kepada prestasi IDE dan masa kompilasi dalam projek besar
  • Bukti konsep, belum bersedia untuk pengeluaran

Evolusi Sistem Jenis TypeScript

Perbincangan mengenai perpustakaan ini menyoroti trend yang lebih luas dalam ekosistem TypeScript: sistem jenis semakin digunakan sebagai bahasa pengaturcaraan tersendiri. Beberapa pengulas membuat perbandingan dengan sistem meta-pengaturcaraan lain, dengan seorang menyatakan bahawa kita menghabiskan semua usaha ini untuk mengubah sistem jenis praprosesor menjadi bahasa meta yang lengkap turing.

Evolusi ini mempunyai penyokong dan pengkritik. Penyokong menghargai fleksibiliti dan kuasa yang dibawa oleh ciri jenis lanjutan untuk menggambarkan corak JavaScript yang kompleks. Pengkritik bimbang bahawa sistem jenis menjadi terlalu kompleks, membawa kepada mesej ralat yang membingungkan dan pengalaman pembangun yang kurang baik.

Satu kemungkinan penambahbaikan masa depan yang disebut adalah sokongan TypeScript untuk inferens jenis dalam literal templat bertanda, yang akan membolehkan sintaks yang lebih elegan ketika bekerja dengan bahasa domain khusus terbenam seperti definisi protobuf.

Kesimpulannya, walaupun protobuf-ts-types menunjukkan pencapaian teknikal yang mengagumkan dalam keupayaan sistem jenis TypeScript, komuniti masih berbelah bahagi mengenai sama ada pendekatan sedemikian praktikal untuk pembangunan seharian. Projek ini berfungsi sebagai bukti konsep yang menarik dan pencetus perbualan tentang arah evolusi TypeScript.

Rujukan: protobuf-ts-types