Kompiler berbasis Go yang baru di TypeScript 7, tsgo, sudah mulai merusak alat pengembangan populer seperti ESLint, ts-jest, dan ts-morph. Kerusakan ini akan terus berlanjut hingga API programatik kompiler tersebut stabil pada rilis 7.1 mendatang, yang berarti tim yang mengandalkan alat-alat ini harus menunda rencana pembaruan apa pun.
Apa yang berubah di TypeScript 7
Rilis ini memperkenalkan tsgo, sebuah port Go dari type-checker yang diberi nama sandi Project Corsa oleh tim TypeScript. Dengan memindahkan inti (core) dari JavaScript ke Go, kompiler ini dapat menghasilkan build hingga sepuluh kali lebih cepat, sebuah berita utama yang menarik para pengadopsi awal yang ingin memangkas waktu pada pipeline CI.
Mengapa alat-alat tersebut gagal
Alat-alat yang bekerja dengan TypeScript tidak berkomunikasi langsung dengan type-checker. Mereka memanggil sekumpulan API internal yang mengekspos informasi tipe, diagnostik, dan penelusuran AST. API tersebut telah ditulis ulang untuk tsgo dan masih dalam tahap perubahan hingga versi 7.1. Hasilnya adalah rentetan crash dan kegagalan tanpa peringatan:
- typescript-eslint – npm menolak untuk menginstalnya bersama TypeScript 7; memaksa instalasi akan membuat ESLint mengeluarkan
TypeError. - ts-jest – mencoba memanggil metode internal yang tidak lagi ada di versi Go, menyebabkan transformasi file pengujian terhenti.
- ts-morph – mengharapkan API yang stabil untuk menelusuri struktur kode; dengan API saat ini, ia mungkin mengembalikan hasil yang salah atau gagal tanpa peringatan.
- Monorepos – tsgo menghilangkan parameter tipe generik tertentu, yang menyebabkan kesalahan tipe yang hanya muncul pada proyek multi-paket yang besar.
Alur kerja apa pun yang mencampurkan linting, pengujian Jest, atau analisis kode dengan TypeScript 7 kemungkinan besar akan mengalami build yang gagal (red builds).
Siapa yang terdampak
- Tim front-end yang menjalankan ESLint sebagai bagian dari setiap pull request.
- Layanan back-end yang mengandalkan ts-jest untuk pengujian unit.
- Library yang menggunakan ts-morph untuk pembuatan kode (code generation) atau dokumentasi.
- Organisasi dengan pengaturan monorepo di mana inferensi tipe sudah kompleks.
Jika pipeline CI Anda menjadi merah setelah pembaruan TypeScript, penyebabnya kemungkinan adalah salah satu dari hal di atas.
Jalur migrasi yang aman hingga 7.1
Cara termudah untuk mendapatkan peningkatan kecepatan tanpa merusak alat adalah dengan memisahkan langkah type-checking yang cepat dari proses build yang sebenarnya:
- Kunci versi utama TypeScript ke 6.x – ini menjaga API stabil yang diharapkan oleh semua alat.
- Tambahkan
@typescript/native-previewsebagai dependensi pengembangan (dev dependency) – paket ini menyertakan biner tsgo untuk type-checking cepat di CI. - Jalankan tsgo dengan
--noEmituntuk pemeriksaan cepat – ini memvalidasi tipe tetapi tidak menghasilkan file keluaran. - Gunakan kompiler
tscklasik untuk build yang sebenarnya –tsctetap menghasilkan JavaScript dan mematuhi API 6.x.
npm install -D typescript@^6.9
npm install -D @typescript/native-preview
Perbarui skrip package.json Anda:
{
"scripts": {
"typecheck:fast": "tsgo --noEmit",
"build": "tsc"
}
}
Dengan pengaturan ganda ini, Anda tetap mendapatkan peningkatan kecepatan sepuluh kali lipat di CI sambil tetap menjaga kompatibilitas dengan ESLint, ts-jest, dan ts-morph.
Kapan Anda dapat langsung memperbarui ke 7.0
Jika basis kode Anda hanya memanggil tsc—tanpa linting, tanpa Jest, tanpa ts-morph—maka API yang tidak stabil tersebut tidak akan memengaruhi Anda. Dalam skenario sempit tersebut, Anda dapat segera beralih ke TypeScript 7 dan menikmati peningkatan performa tanpa langkah tambahan.
Hal yang perlu diperhatikan
- Versi 7.1 – tim TypeScript telah memberi sinyal bahwa API programatik akan dibekukan pada rilis ini. Setelah rilis tersebut tiba, jembatan antara tsgo dan alat yang ada akan hilang, memungkinkan pembaruan yang bersih.
- Pembaruan alat (tooling) – pantau rilis baru dari
typescript-eslint,ts-jest, dants-morph. Mereka akan merilis versi yang kompatibel segera setelah 7.1 diluncurkan. - Konfigurasi CI – ingatlah untuk mengganti
tsgo --noEmitdengan panggilantscbiasa setelah API stabil; paket pratinjau tidak akan diperlukan lagi.
Kesimpulan: Hingga penguncian API 7.1, tetaplah gunakan TypeScript 6.x untuk kompiler utama Anda, tambahkan @typescript/native-preview untuk pemeriksaan cepat, dan tetap gunakan tsc untuk build. Hal ini menghindari kegagalan linting dan pengujian sambil tetap mendapatkan manfaat performa dari mesin Go yang baru.
