TypeScript 7 mempunyai kompilator berasaskan Go yang baharu, tsgo, yang sudah mula menjejaskan alatan pembangunan popular seperti ESLint, ts-jest dan ts-morph. Gangguan ini akan berterusan sehingga API pengaturcaraan kompilator tersebut stabil dalam versi 7.1 yang akan datang, bermakna pasukan yang bergantung kepada alatan ini perlu menangguhkan sebarang rancangan naik taraf.

Apa yang berubah dalam TypeScript 7

Versi ini memperkenalkan tsgo, sebuah port Go bagi penyemak jenis (type-checker) yang diberi nama kod Project Corsa oleh pasukan TypeScript. Dengan memindahkan teras daripada JavaScript ke Go, kompilator ini dapat memberikan hasil binaan (builds) sehingga sepuluh kali lebih pantas, satu kelebihan utama yang menarik minat pengguna awal yang ingin menjimatkan masa dalam saluran paip (pipeline) CI mereka.

Mengapa alatan tersebut gagal

Alatan yang berfungsi dengan TypeScript tidak berkomunikasi secara terus dengan penyemak jenis. Sebaliknya, ia memanggil set API dalaman yang mendedahkan maklumat jenis, diagnostik dan penelusuran AST. API tersebut telah ditulis semula untuk tsgo dan masih belum stabil sehingga versi 7.1. Hasilnya ialah rantaian kegagalan sistem (crashes) dan kegagalan senyap (silent failures):

  • typescript-eslint – npm enggan memasangnya bersama TypeScript 7; memaksa pemasangan akan menyebabkan ESLint mengeluarkan TypeError.
  • ts-jest – cuba memanggil kaedah dalaman yang tidak lagi wujud dalam versi Go, menyebabkan transformasi fail ujian terhenti.
  • ts-morph – menjangkakan API yang stabil untuk menelusuri struktur kod; dengan API semasa, ia mungkin memberikan hasil yang salah atau gagal tanpa amaran.
  • Monorepos – tsgo menggugurkan parameter jenis generik tertentu, yang membawa kepada ralat jenis yang hanya muncul dalam projek pelbagai pakej yang besar.

Sebarang aliran kerja yang menggabungkan linting, ujian Jest atau analisis kod dengan TypeScript 7 berkemungkinan besar akan mengalami kegagalan binaan (red builds).

Siapa yang terjejas

  • Pasukan hadapan (front-end) yang menjalankan ESLint sebagai sebahagian daripada setiap permintaan tarik (pull request).
  • Perkhidmatan bahagian belakang (back-end) yang bergantung kepada ts-jest untuk ujian unit.
  • Pustaka (libraries) yang menggunakan ts-morph untuk penjanaan kod atau dokumentasi.
  • Organisasi dengan tetapan monorepo di mana inferens jenis sudah pun kompleks.

Jika saluran paip CI anda menjadi merah selepas naik taraf TypeScript, puncanya berkemungkinan besar adalah salah satu daripada perkara di atas.

Laluan migrasi yang selamat sehingga 7.1

Cara termudah untuk mengekalkan peningkatan kelajuan tanpa menjejaskan alatan adalah dengan memisahkan langkah penyemakan jenis yang pantas daripada proses binaan yang sebenar:

  1. Tetapkan versi TypeScript utama kepada 6.x – ini mengekalkan API stabil yang diharapkan oleh semua alatan.
  2. Tambah @typescript/native-preview sebagai kebergantungan pembangunan (dev dependency) – pakej ini menyediakan binari tsgo untuk penyemakan jenis yang pantas dalam CI.
  3. Jalankan tsgo dengan --noEmit untuk semakan pantas – ia mengesahkan jenis tetapi tidak menghasilkan fail output.
  4. Gunakan kompilator tsc klasik untuk binaan sebenartsc masih menghasilkan JavaScript dan mematuhi API 6.x.
npm install -D typescript@^6.9
npm install -D @typescript/native-preview

Kemas kini skrip package.json anda:

{
  "scripts": {
    "typecheck:fast": "tsgo --noEmit",
    "build": "tsc"
  }
}

Dengan tetapan dwi ini, anda mengekalkan peningkatan kelajuan sepuluh kali ganda dalam CI sambil mengekalkan keserasian dengan ESLint, ts-jest dan ts-morph.

Bila anda boleh naik taraf terus ke 7.0

Jika kod sumber anda hanya memanggil tsc—tanpa linting, tanpa Jest, tanpa ts-morph—maka API yang tidak stabil itu tidak menjejaskan anda. Dalam senario terhad tersebut, anda boleh beralih ke TypeScript 7 dengan segera dan menikmati peningkatan prestasi tanpa langkah tambahan.

Perkara yang perlu diperhatikan

  • Versi 7.1 – pasukan TypeScript telah memberi isyarat bahawa API pengaturcaraan akan dibekukan dalam versi ini. Sebaik sahaja ia dilancarkan, jambatan antara tsgo dan alatan sedia ada akan hilang, membolehkan naik taraf yang lancar.
  • Kemas kini alatan – perhatikan keluaran baharu bagi typescript-eslint, ts-jest dan ts-morph. Mereka akan menerbitkan versi yang serasi sejurus selepas versi 7.1 dilancarkan.
  • Konfigurasi CI – ingat untuk menggantikan tsgo --noEmit dengan panggilan tsc biasa sebaik sahaja API stabil; pakej pratonton (preview) tidak lagi diperlukan.

Rumusan: Sehingga API 7.1 dikunci, kekal pada TypeScript 6.x untuk kompilator utama anda, tambah @typescript/native-preview untuk semakan pantas, dan terus gunakan tsc untuk binaan. Ini mengelakkan masalah linting dan ujian yang rosak sambil tetap mendapat manfaat prestasi daripada enjin Go yang baharu.