Topik wawancara representatif

Wawancara Koding: Mengevaluasi Type Stripping TypeScript Bawaan Node.js

CodingSedang
Tim Redaksi Offer.ccDipublikasikan Diperbarui

Pertanyaan

Sebuah tim ingin menjalankan TypeScript secara langsung di Node.js untuk mengurangi langkah build. Bagaimana Anda memutuskan apakah type stripping bawaan sudah siap untuk produksi dan merencanakan migrasi dari tsx atau artefak yang dikompilasi?

Petunjuk dan konteks

Sebuah layanan Node.js saat ini mengompilasi TypeScript ke JavaScript sebelum kontainer dimulai. Tim ingin mengeksekusi berkas .ts secara langsung untuk mempersingkat skrip dan toolchain pengembang. Jelaskan type stripping bawaan, batas dukungannya, resolusi modul, batasan konfigurasi, pengujian, dan strategi rilis produksi.

Apa yang dievaluasi oleh pewawancara

  • Apakah Anda mengetahui bahwa Node.js menghapus anotasi tipe tanpa pemeriksaan tipe (type checking) atau pembuatan kode runtime.
  • Apakah Anda mengidentifikasi enum, runtime namespace, parameter property, dan decorator sebagai sintaks yang tidak dapat dihapus (non-erasable).
  • Apakah Anda memahami bahwa Node.js mengabaikan tsconfig.json, sehingga alias path dan transformasi target tidak berlaku secara otomatis.
  • Apakah Anda memisahkan skrip pengembangan, artefak yang dikompilasi, dependensi, dan layanan produksi.

Pertanyaan klarifikasi yang perlu diajukan

  1. Apakah targetnya adalah skrip pengembangan, CLI, pengujian, atau layanan produksi yang berjalan terus-menerus?
  2. Apakah kode menggunakan enum, decorator, parameter property, namespace, atau alias path?
  3. Bisakah mode modul, versi Node, versi TypeScript, dan image rilis distandarisasi?
  4. Apakah tim memerlukan pemeriksaan tipe penuh, transformasi kode sumber, source map, atau dukungan versi Node yang lebih lama?

Kerangka jawaban 30 detik

Saya akan memperlakukan fitur bawaan ini sebagai eksekutor ringan. Fitur ini menggantikan sintaks tipe yang dapat dihapus dengan spasi kosong, tidak melakukan pemeriksaan tipe, dan tidak menghasilkan JavaScript untuk enum atau decorator. Pertama, pindai kode dan kunci versi Node. Gunakan import type, ekstensi eksplisit, dan aturan modul yang jelas daripada mengandalkan alias path tsconfig. Layanan yang memerlukan semantik TypeScript penuh tetap mempertahankan kompiler atau tsx; jalur bawaan dimulai dengan skrip dan alat kecil. CI menjalankan pemeriksaan tipe, pengujian runtime, dan pemeriksaan artefak sebelum memperluas cakupan.

Pembahasan mendalam langkah demi langkah

1. Jelaskan model penghapusan (erasure model)

Node.js menggantikan anotasi tipe dengan spasi kosong, sehingga nomor baris stack umumnya tetap sejajar tanpa source map. Fitur ini tidak memeriksa tipe atau mentransformasikan sintaks yang memerlukan pembuatan JavaScript. Enum, runtime namespace, parameter property, dan decorator menghasilkan kesalahan sintaks tidak didukung. Eksekusi langsung terbatas pada sintaks yang dapat dihapus.

2. Kunci modul dan impor

Node.js mendukung berkas TypeScript CommonJS dan ES module; mode sebenarnya bergantung pada konfigurasi paket, ekstensi, dan pemanggilan. Impor tipe harus menggunakan import type; jika tidak, impor yang dihapus akan diperlakukan sebagai nilai dan gagal saat runtime. Gunakan ekstensi relatif yang dapat diselesaikan dan package.json imports daripada alias yang tidak dapat ditransformasikan oleh Node.

3. Hormati tsconfig dan batasan dependensi

Eksekutor bawaan mengabaikan tsconfig.json, sehingga tidak menerapkan target lowering, pemetaan path, atau transformasi kompiler lainnya. Node.js juga menolak berkas TypeScript di bawah node_modules untuk mencegah kode sumber yang belum dikompilasi menjadi kontrak paket. Gunakan kompiler lengkap atau alat runtime ketika transformasi, decorator, atau dependensi TypeScript diperlukan.

4. Rencanakan validasi dan rollback

Jalankan lint, pemeriksaan tipe, unit test, integration test, dan startup probe di seluruh matriks versi Node. Bandingkan eksekusi yang dikompilasi dan yang dihapus untuk melihat perilaku, waktu startup, dan kesalahan. Kunci runtime: type stripping stabil mulai dari v25.2 dan v24.12, sementara v26 menghapus switch transformasi eksperimental. Jika produksi gagal, kembalilah ke artefak yang dikompilasi alih-alih mengaktifkan transformasi yang tidak didukung secara ad-hoc.

Contoh jawaban berkualitas tinggi

Saya akan memperlakukan type stripping bawaan sebagai jalur eksekusi TypeScript ringan, bukan kompiler lengkap. Buat inventaris enum, decorator, parameter property, runtime namespace, alias path, dan dependensi TypeScript; hal-hal tersebut memerlukan transformasi atau pemeriksaan, jadi pertahankan kompiler atau tsx. Kode yang dimigrasikan menggunakan import type, aturan modul yang stabil, dan path relatif yang dapat diselesaikan, sementara tsc --noEmit tetap menjadi gerbang pemeriksaan tipe. Node.js mengabaikan tsconfig, jadi skrip build harus mengonfigurasi impor paket secara eksplisit. Terapkan secara canary pada skrip pengembangan dan CLI terlebih dahulu, lalu minta CI membandingkan startup probe, kesalahan runtime, pengujian, dan perilaku image. Kemampuan ini stabil dari v25.2/v24.12 dan v26 menghapus switch transformasi eksperimental. Layanan produksi hanya beralih setelah matriks lolos dan mempertahankan opsi rollback artefak yang dikompilasi.

Kesalahan umum

  • Memperlakukan type stripping sebagai pemeriksaan tipe atau kompiler lengkap.
  • Menjalankan berkas dengan enum, decorator, parameter property, atau runtime namespace secara langsung.
  • Mengandalkan paths tsconfig, transformasi target, atau pengaturan JSX.
  • Menghilangkan import type sehingga menyebabkan kesalahan runtime impor nilai setelah penghapusan tipe.
  • Menjalankan TypeScript yang belum dikompilasi dari node_modules dalam image produksi.
  • Mengukur kecepatan startup tanpa pemeriksaan tipe, pengujian integrasi, atau matriks versi yang lebih lama.

Pertanyaan lanjutan dan jawaban

Mengapa type stripping biasanya tidak memerlukan source map?

Implementasinya menggantikan anotasi dengan spasi kosong dan mempertahankan posisi karakter, sehingga baris saat runtime umumnya masih memetakan ke berkas sumber. Sintaks yang ditransformasikan tetap membutuhkan kompiler lengkap dan source map.

Kapan tsx atau kompiler harus tetap dipertahankan?

Pertahankan toolchain untuk enum, decorator, parameter property, alias path, transformasi target, pemeriksaan tipe penuh, atau dependensi TypeScript yang memerlukan kompilasi.

Bagaimana Anda mengontrol perbedaan versi Node?

Kunci versi dalam image, CI, dan alat lokal serta lakukan deteksi kemampuan. Perlakukan type stripping sebagai prasyarat runtime dan gunakan artefak JavaScript yang terverifikasi sebagai fallback saat fitur tersebut tidak tersedia.

Sumber publik

Pertanyaan terkait

Alat wawancara terkait

Gunakan Tangkapan Layar untuk perintah coding

Ambil tangkapan layar soal, lalu telusuri batasan, solusi, kode, edge case, dan kompleksitas secara berurutan.

Lihat alat