Episode ini menutup fase teknis seri dengan strict mode: apa saja yang diaktifkan opsi strict, pendalaman noImplicitAny, peran strictNullChecks, dan opsi ekstra seperti noUncheckedIndexedAccess serta cara mengetatkan proyek yang sudah berjalan.

Semua yang kalian pelajari sejauh ini berakhir pada satu keputusan: seberapa ketat compiler boleh bekerja. Mode default TypeScript toleran, memberi ruang nyaman yang sering menyembunyikan bug. Strict mode menutup ruang itu dan menjadikan compiler penjaga paling keras di tim kalian.
strict: true mengaktifkan satu keluarga opsi yang saling menguatkan. Masing-masing menutup satu kelas kesalahan, dan bersama-sama mereka mengubah pengalaman menulis TypeScript dari sekadar transkripsi tipe menjadi pengaman yang menuntun desain.
Episode 22 membedah apa yang diaktifkan strict mode, mendalami noImplicitAny, membandingkan opsi ketat lainnya, dan memberikan strategi bertahap untuk mengetatkan proyek yang sudah berjalan.
Mengatur strict: true setara mengaktifkan banyak opsi sekaligus:
{
"compilerOptions": {
"strict": true
}
}Deklarasi strict: true mengaktifkan antara lain noImplicitAny, strictNullChecks, strictFunctionTypes, strictPropertyInitialization, strictBindCallApply, noImplicitThis, alwaysStrict, dan useUnknownInCatchVariables. Setiap opsi menutup satu kelas kesalahan. Menulisnya satu per satu secara manual rawan lupa; satu bendera jauh lebih aman.
Opsi paling dikenal dari keluarga strict:
function hitungDiskon(harga, persen) {
return harga - (harga * persen) / 100;
}Parameter harga dan persen tanpa annotation dan tanpa inference. Dengan noImplicitAny, TypeScript melaporkan error karena tipe disimpulkan sebagai any secara implisit. Kalian dipaksa menulis tipe eksplisit. Bila tipe benar-benar tidak pasti, unknown adalah pilihan yang lebih aman daripada any.
strictNullChecks telah dibahas di episode 3 dan menjadi tulang punggung keamanan null:
function ambilNama(p: Pengguna | null): string {
return p ? p.nama : "tanpa nama";
}Union dengan null membuat nilai kosong terlihat jelas dan wajib ditangani. strictPropertyInitialization melengkapi dengan memaksa properti class diinisialisasi di deklarasi atau di constructor:
class Mesin {
status: string;
}Class Mesin di atas menghasilkan error karena status tidak diinisialisasi. Solusinya menginisialisasi di deklarasi, menetapkan di constructor, atau menandai dengan tanda tanya bila memang bisa kosong. Kedua opsi ini menghapus kelas bug paling umum di JavaScript.
Di luar strict, TypeScript menyediakan pengetatan lebih jauh:
{
"compilerOptions": {
"noUncheckedIndexedAccess": true,
"exactOptionalPropertyTypes": true,
"noUnusedLocals": true,
"noUnusedParameters": true
}
}Opsi noUncheckedIndexedAccess menjadikan akses index sebagai T | undefined, memaksa pengecekan sebelum memakai elemen array atau objek. exactOptionalPropertyTypes mencegah properti opsional diisi undefined secara eksplisit. noUnusedLocals dan noUnusedParameters membuang variabel dan parameter yang tidak terpakai. Opsi-opsi ini bukan bagian dari strict, tapi melengkapi kualitas yang sama.
Mengetatkan proyek lama tidak harus sekaligus. Komentar kontrol dari episode 13 menjadi pintu masuk:
// @ts-nocheckTambahkan // @ts-nocheck di file yang belum siap, aktifkan strict di tsconfig, lalu hapus komentar file demi file sambil memperbaiki error. Pendekatan ini membuat migrasi berjalan bertahap tanpa menghentikan pengembangan.
Tip
Aktifkan strictNullChecks lebih dulu karena berdampak paling besar, lalu noImplicitAny, kemudian sisanya. Ukur jumlah error tiap langkah, perbaiki, dan lanjutkan. Kecil dan sering selalu lebih aman daripada perombakan besar.
Dengan strict mode aktif penuh, compiler menjadi bagian dari standar kualitas tim. Kode yang lolos tsc bukan sekadar kode yang berjalan, tapi kode yang terbukti menangani nilai kosong, tipe tak pasti, dan bentuk fungsi dengan benar.
Episode 22 menutup fase teknis seri dengan standar kualitas tertinggi: strict mode aktif, noImplicitAny memaksa tipe eksplisit, dan opsi tambahan yang menghapus sisa celah. Kini kalian tahu persis bagaimana compiler yang ketat melindungi setiap baris kode.
Inti yang harus dibawa pulang:
strict: true mengaktifkan satu keluarga opsi pengetatan.noImplicitAny menolak tipe any yang tersirat dari kode.strictNullChecks membuat nilai kosong wajib ditangani.strictPropertyInitialization memaksa properti class diinisialisasi.noUncheckedIndexedAccess menandai akses index yang bisa kosong.Kalian telah sampai di ujung seri ini. Untuk menutupnya, episode berikut akan menjadi wrap-up: menyusun sebuah proyek TypeScript siap produksi yang merangkai seluruh materi — dari tsconfig ketat, model tipe domain, validasi runtime, testing, hingga pipeline build dan rilis — menjadi satu aplikasi utuh yang bisa kalian jalankan dan kembangkan sendiri.