tsc-ts adalah port eksperimental compiler TypeScript 7.0.2 yang ditulis ulang dalam TypeScript idiomatik, lalu dikompilasi menjadi binary native dengan scriptc 0.3.5. Repo vercel-labs itu menguji hasilnya terhadap korpus TypeScript berisi sekitar 12.500 file dan 17.000 unit setelah kasus multi-file dipecah. Paketnya bisa dipasang lewat npm dan dijalankan dengan perintah npx tsc-ts -p tsconfig.json.
TL;DR
- tsc-ts adalah port TypeScript 7.0.2 (tsgo) ke TypeScript, bukan fork compiler lama.
- Hasilnya dikompilasi jadi binary native lewat scriptc, lalu didistribusikan sebagai paket npm per platform.
- Semua tahap compiler dibandingkan dengan tsgo pada korpus sekitar 12.500 file dan 17.000 unit.
- Statusnya eksperimen Vercel Labs dengan lisensi Apache-2.0, bukan pengganti produksi untuk tsc.
- Butuh Node.js 24+ dan Go 1.26 kalau ingin build dari source.
Apa bedanya tsc-ts dengan tsgo dan tsc biasa?
tsc-ts adalah port dari tsgo, yaitu compiler TypeScript yang ditulis dalam Go oleh Microsoft. Bedanya, tsc-ts menulis ulang logika tsgo dalam TypeScript idiomatik, lalu memakai scriptc untuk mengompilasinya menjadi kode native. tsc biasa adalah compiler JavaScript yang selama ini dipakai, dan menjadi salah satu pembanding di benchmark repo.
Ketiganya mengejar hasil yang sama, yaitu diagnosa dan output JavaScript yang konsisten dengan compiler TypeScript. Perbedaannya ada di jalur implementasi. tsc berjalan di atas Node.js, tsgo berjalan sebagai binary Go, dan tsc-ts berjalan sebagai binary native hasil kompilasi TypeScript.
| Aspek | tsc-ts | tsgo | tsc |
|---|---|---|---|
| Bahasa implementasi | TypeScript idiomatik | Go | JavaScript |
| Cara distribusi | Paket npm dengan binary native per platform | Build native dari repo Microsoft | Paket npm |
| Status | Eksperimen Vercel Labs | Proyek Microsoft | Compiler stabil |
| Acuan kompatibilitas | TypeScript 7.0.2 | TypeScript 7.0.2 | Versi TypeScript yang dipasang |
Karena tsc-ts mengikuti tsgo 7.0.2, ia bukan pengganti drop-in untuk semua versi TypeScript. Proyek yang masih memakai TypeScript 5.x dan bergantung pada perilaku spesifik versi itu perlu menguji ulang sebelum mengganti compiler.
Bagaimana cara memasang dan memakai tsc-ts?
Instalasinya lewat npm sebagai dev dependency. Paket tsc-ts akan menjalankan executable native dari optional dependency sesuai platform, misalnya @tsc-ts/darwin-arm64 atau @tsc-ts/linux-x64-gnu. Setelah terpasang, perintahnya bisa dipanggil dengan npx.
npm install -D tsc-ts
npx tsc-ts -p tsconfig.json
Perintah di atas menjalankan kompilasi seperti tsc biasa dengan file konfigurasi proyek. Kalau proyek memakai script build di package.json, ganti pemanggilan tsc dengan tsc-ts untuk mencoba compiler ini tanpa mengubah konfigurasi TypeScript.
Untuk memakainya sebagai server API, jalankan flag --api. Server itu melayani API yang sama dengan tsc --api versi 7.0.2 lewat stdin dan stdout, sehingga tool yang sudah bisa menggerakkan tsc --api, seperti scriptc, bisa diarahkan ke tsc-ts.
npm run build -w tsc-ts
node packages/tsc-ts/dist/tsc-ts/src/main.js --api --cwd path/to/project
Kalau memakai binary native, file lib dibaca dari direktori executable atau dari environment variable TSC_TS_LIB_DIR. Binary native dibangun dengan npm run build:native -w tsc-ts, dan versi development yang lebih cepat dibangun dengan npm run build:native:dev -w tsc-ts.
Seberapa dekat hasilnya dengan tsgo?
Repo mengklaim semua tahap yang diuji cocok dengan tsgo pada korpus TypeScript. Korpus itu berisi sekitar 12.500 file, dan setelah kasus multi-file dipecah menjadi unit terpisah, jumlahnya menjadi sekitar 17.000 unit. Setiap tahap punya kriteria pembanding sendiri, bukan hanya perbandingan output akhir.
| Tahap compiler | Dibandingkan dengan tsgo | Status |
|---|---|---|
| Scanner | Token, nilai, error, rescan, JSDoc | Semua file cocok |
| Parser dan AST | Pohon, diagnostik, encoding source file API | Semua unit cocok |
| Binder | Simbol, tabel, flow graph, resolusi nama | Semua unit cocok |
| Resolusi modul | Hasil, package ID, traceResolution | Semua request cocok |
| tsconfig dan program | showConfig, listFilesOnly, explainFiles | Semua kasus cocok |
| Command line | Output, error, exit code, locale | Semua kasus cocok |
| Katalog diagnostik | Pesan, 13 terjemahan, format output | Semua cocok |
| JavaScript emit | File hasil, 39 set opsi | Semua unit cocok |
| Declaration emit | File d.ts dan d.ts.map, error deklarasi | Semua unit cocok |
| Build dan incremental | Output, tsbuildinfo, file hasil, watch | Semua skenario cocok |
| Type checker | Diagnostik per file | Semua file cocok |
Klaim paritas itu kuat, tetapi cakupannya tetap korpus uji, bukan seluruh kode TypeScript di dunia. Proyek dengan konfigurasi tidak umum, plugin transformasi, atau ketergantungan pada perilaku edge case bisa menemukan perbedaan yang tidak tertangkap korpus. Karena itu, pengujian di proyek sendiri tetap langkah wajib sebelum mengganti compiler.
Bagaimana cara build dari source?
Build dari source membutuhkan Node.js 24 atau lebih baru, npm, Go 1.26, dan host scriptc yang mendukung macOS, Linux, atau Windows dengan clang untuk linking. Versi scriptc dipin di package.json, yaitu 0.3.5 beserta paket @scriptc/threads, dan build akan gagal kalau versinya berbeda.
npm ci
npm run fetch:upstream
npm run build
npm run build:oracle
Perintah fetch:upstream meng-clone tsgo pada commit yang dipin. Perintah build menghasilkan build Node dari tsc-ts di packages/tsc-ts/dist sekaligus situs dokumentasi. Perintah build:oracle menghasilkan build referensi tsgo di packages/tsgo/dist yang dipakai sebagai pembanding dalam pengujian.
Untuk mengemas paket npm bagi platform saat ini, tersedia npm run pack:npm -w tsc-ts. Varian dengan flag --check juga memasang tarball hasil paket lalu mengompilasi sebuah proyek sebagai uji asap. Kalau sudah punya binary native, flag -- --binary dist/tsc bisa dipakai untuk mengemas binary yang ada tanpa membangun ulang.
Apa yang belum didukung?
Server API tsc-ts mendukung sejumlah metode language service, seperti getCompletionsAtPosition, getJsDocTags, getDocumentationComment, getReferencesToSymbolInFile, getReferencedSymbolsForNode, dan getSignatureUsages. Namun metode profiling startCPUProfile, stopCPUProfile, dan saveHeapProfile tidak didukung.
Ada juga batasan pada completion yang membutuhkan auto import. Seperti tsc --api, completion untuk identifier global, import statement, dan exhaustive switch case melaporkan pesan bahwa daftar completion membutuhkan auto import. Artinya, editor atau tool yang bergantung pada completion otomatis perlu menangani kondisi itu sendiri.
Di luar API, repo menyediakan perintah npm test untuk membandingkan tsc-ts dengan tsgo, npm run bench untuk mengukur waktu terhadap tsgo dan compiler JavaScript TypeScript, oxlint untuk lint, dan oxfmt untuk format. Perintah-perintah ini berguna kalau ingin memverifikasi klaim paritas di mesin sendiri.
Kapan sebaiknya memakai tsc-ts?
tsc-ts cocok untuk eksperimen dan pengukuran, bukan untuk pipeline produksi yang belum siap menanggung risiko. Statusnya eksperimen Vercel Labs, dan repo menandainya sebagai LABS EXPERIMENT. Kalau tujuanmu menguji seberapa jauh compiler TypeScript bisa dijalankan sebagai binary native, ini alat yang tepat.
Untuk proyek produksi, tsc biasa masih pilihan paling aman karena sudah teruji bertahun-tahun dan menjadi acuan ekosistem. tsgo juga lebih matang sebagai proyek Microsoft. tsc-ts menarik kalau kamu ingin berkontribusi pada port TypeScript, menguji performa, atau bereksperimen dengan tooling baru.
Satu hal yang perlu diingat: tsc-ts bukan proyek yang menjanjikan kompatibilitas mundur dengan semua versi TypeScript. Ia mengikuti tsgo 7.0.2. Proyek yang masih di TypeScript 5.x sebaiknya tidak menganggap tsc-ts sebagai pengganti langsung tanpa audit konfigurasi dan output.
Bagaimana cara menguji paritas di proyek sendiri?
Langkah pertama adalah menyiapkan baseline. Jalankan tsc atau tsgo pada proyek, simpan output JavaScript, file deklarasi, dan diagnostik. Setelah itu, jalankan tsc-ts dengan konfigurasi yang sama dan bandingkan hasilnya. Perbedaan sekecil apa pun perlu dicatat, termasuk urutan diagnostik dan isi file peta sumber.
Langkah kedua adalah menguji mode build dan incremental. Repo mengklaim paritas untuk --build, --incremental, dan --watch, tetapi perilaku watch sangat bergantung pada filesystem dan editor. Uji di lingkungan yang sama dengan pipeline nyata, bukan hanya di laptop.
Langkah ketiga adalah mengukur performa dengan perintah bench yang disediakan repo. Perintah npm run bench -w tsc-ts membandingkan tsc-ts dengan tsgo dan compiler JavaScript TypeScript. Hasilnya bergantung pada mesin, ukuran proyek, dan konfigurasi, jadi angka dari mesin lain tidak bisa dipakai langsung.
Langkah keempat adalah memeriksa integrasi tooling. Kalau proyek memakai ESLint, bundler, atau editor language server yang memanggil tsc --api, pastikan tool tersebut kompatibel dengan API yang disediakan tsc-ts. Metode profiling tidak didukung, jadi tool yang bergantung pada profil CPU atau heap perlu penanganan khusus.
Apa risiko memakai compiler eksperimental?
Risiko utamanya adalah perbedaan perilaku yang tidak tertangkap korpus uji. Compiler bisa menghasilkan output yang benar secara sintaks tetapi berbeda dalam detail yang penting, misalnya urutan emisi atau penanganan deklarasi. Untuk library yang dipublikasikan, perbedaan seperti itu bisa memengaruhi konsumen.
Risiko kedua adalah dukungan jangka panjang. Proyek eksperimen bisa berubah cepat atau berhenti tanpa notice. Kalau pipeline produksi bergantung padanya, biaya migrasi kembali ke tsc bisa lebih besar daripada penghematan yang didapat.
Risiko ketiga adalah keamanan supply chain. Paket npm dengan binary per platform menambah permukaan yang perlu diverifikasi. Untuk organisasi dengan kebijakan ketat, proses review paket dan pin versi tetap wajib.
Sumber utama
README dan kode sumber tersedia di github.com/vercel-labs/tsc-ts. Dokumentasi compiler ada di tsc-ts.dev, dan alat kompilasi yang dipakai adalah scriptc. Acuan implementasi Go dari Microsoft ada di typescript-go.
Struktur repo memisahkan compiler dan referensi. Paket packages/tsc-ts berisi compiler, command line, dan server API. Paket packages/tsgo berisi build referensi tsgo yang dipakai tes. Pemisahan ini memudahkan pembaca melihat mana kode yang diuji dan mana yang menjadi pembanding.
FAQ
Apakah tsc-ts compiler resmi dari Microsoft?
Bukan. tsc-ts dibuat oleh vercel-labs sebagai eksperimen. Compiler resmi berbasis Go adalah tsgo, yang dikembangkan Microsoft, dan tsc-ts memakai tsgo 7.0.2 sebagai acuan kompatibilitas.
Apakah tsc-ts lebih cepat dari tsc?
Repo menyediakan perintah bench untuk mengukur itu, tetapi README tidak mencantumkan angka hasil benchmark di halaman utama. Klaim kecepatan harus diukur sendiri dengan perintah npm run bench pada mesin dan proyek yang relevan.
Apakah tsc-ts bisa dipakai di CI?
Bisa secara teknis karena tersedia paket npm dan binary per platform. Untuk produksi, pertimbangkan status eksperimen dan uji dulu di pipeline non-kritis sebelum menggantikan tsc di pipeline utama.
Lisensi apa yang dipakai tsc-ts?
Apache-2.0. Repo juga menyertakan THIRD_PARTY_NOTICES.md untuk TypeScript-Go dan komponen pihak ketiga lain, jadi notice itu perlu dibawa kalau mendistribusikan ulang.
Platform apa saja yang didukung?
Paket menyediakan optional dependency per platform, misalnya darwin-arm64 dan linux-x64-gnu. Build dari source membutuhkan host scriptc dengan clang, dan README menyebut macOS, Linux, serta Windows sebagai host yang didukung.
Rekomendasi Tools & Layanan
Kalau lo mau langsung praktikkan panduan di atas, dua layanan yang gue pake sehari-hari: free trial Alibaba Cloud buat coba-coba tanpa biaya di awal, dan ECS instance 9th-gen kalau udah siap naik ke VPS production.
💬 Komentar (0)
Belum ada komentar. Jadilah yang pertama! 💬