Sokongan TypeScript Asli Node.js Mencetuskan Perdebatan Mengenai Persaingan Runtime

Pasukan Komuniti BigGo
Sokongan TypeScript Asli Node.js Mencetuskan Perdebatan Mengenai Persaingan Runtime

Node.js akhirnya menyertai perlumbaan untuk menyokong TypeScript secara asli, tetapi komuniti pembangun mempersoalkan sama ada langkah ini datang terlalu lewat untuk memberi kesan. Dengan versi 23.6.0 yang membolehkan pelucutan jenis secara lalai, Node.js kini boleh menjalankan kod TypeScript secara langsung tanpa transpilasi, menandakan perubahan ketara bagi runtime veteran ini.

Pelaksanaan ini membolehkan pembangun melaksanakan fail TypeScript menggunakan arahan mudah, melucutkan anotasi jenis secara automatik. Untuk sintaks TypeScript asas, tiada flag tambahan diperlukan dalam versi terkini. Ciri yang lebih kompleks seperti enums dan namespaces memerlukan flag transform eksperimental, tetapi asasnya kini telah tersedia.

Garis Masa Sokongan TypeScript Node.js:

  • v22.6.0: Pelucutan jenis eksperimen dengan bendera --experimental-strip-types
  • v22.7.0: Ditambah transformasi sintaks TypeScript dengan bendera --experimental-transform-types
  • v23.6.0: Pelucutan jenis didayakan secara lalai untuk sintaks TypeScript yang boleh dipadam

Peperangan Runtime Semakin Memanas

Respons komuniti mendedahkan kebimbangan yang semakin meningkat mengenai Node.js yang ketinggalan berbanding alternatif yang lebih baharu. Pembangun semakin membandingkan Node.js dengan runtime moden seperti Deno dan Bun, yang telah menawarkan sokongan TypeScript dari awal. Perbincangan ini menyerlahkan persoalan asas: adakah saiz ekosistem masih mengatasi ciri moden?

Ia semata-mata ekosistem pada ketika ini. Deno, Bun, mana-mana runtime adalah lebih moden. Bagus mereka sedang mengejar tetapi pada masa typescript menjadi warganegara asli dalam node, yang lain mungkin mengambil mahkota.

Sentimen ini mencerminkan kekecewaan industri yang lebih luas terhadap penggunaan ciri mesra pembangun yang lebih perlahan oleh Node.js. Walaupun Node.js mengekalkan kelebihan ekosistem yang besar, pesaing menawarkan pengalaman yang lebih baik dengan ciri seperti sokongan TypeScript terbina dalam, API moden, dan perkakas yang diperkemas.

Konteks Perbandingan Runtime:

  • Node.js: Ekosistem terbesar, penggunaan TypeScript secara beransur-ansur
  • Deno: Sokongan TypeScript asli, API moden, beberapa isu keserasian
  • Bun: Prestasi pantas, terbina dalam TypeScript , ekosistem yang lebih kecil

Kebimbangan Pelaksanaan Teknikal

Pendekatan teknikal juga telah menarik perhatian daripada pembangun yang biasa dengan perkakas TypeScript. Sesetengah mempersoalkan mengapa Node.js membina pelucut jenis sendiri daripada memanfaatkan penyelesaian sedia ada seperti TypeScript Compiler atau SWC secara langsung. Keputusan ini menimbulkan kebimbangan mengenai mengekalkan keserasian apabila TypeScript berkembang dan menambah konstruk bahasa baharu.

Walau bagaimanapun, pelaksanaan ini menggunakan SWC di bawahnya, yang sepatutnya membantu dengan prestasi dan keserasian. Pendekatan pelucutan jenis bermakna ciri TypeScript baharu tidak sepatutnya merosakkan fungsi sedia ada, kerana sistem hanya membuang anotasi jenis daripada menghurai sintaks yang kompleks.

Ciri-ciri TypeScript yang Disokong:

  • Pelucutan jenis asas: Parameter fungsi, jenis pemulangan, anotasi pembolehubah
  • Transformasi lanjutan: Enums, ruang nama (memerlukan bendera eksperimen)
  • Batasan: Beberapa sekatan eksperimen terpakai (lihat dokumen API Node.js)

Faedah Praktikal Muncul

Walaupun terdapat perdebatan, sesetengah pembangun melaporkan faedah praktikal segera. Gabungan sokongan TypeScript asli dengan keupayaan ujian Node.js yang diperbaiki menghapuskan keperluan untuk saluran paip binaan yang kompleks dalam persekitaran pembangunan. Ujian berjalan lebih pantas dengan lebih sedikit kebergantungan, walaupun pembangun masih perlu mengikuti amalan khusus seperti membuat anotasi import jenis dan menggunakan sambungan fail.

Ciri ini mewakili percubaan Node.js untuk memodenkan sambil mengekalkan keserasian ke belakang. Sama ada strategi ini boleh bersaing dengan runtime moden yang dibina khas kekal sebagai persoalan terbuka apabila ekosistem JavaScript terus berkembang dengan pantas.

Rujukan: Running TypeScript Natively