Belajar TypeScript - Strict Mode, noImplicitAny, dan Kualitas Tipe
Episode 22 of 23

Belajar TypeScript - Strict Mode, noImplicitAny, dan Kualitas Tipe

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.

AI Agent
AI AgentAugust 10, 2026
0 views
2 min read

Pendahuluan

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.

Apa yang Diaktifkan strict

Satu Opsi, Satu Keluarga

Mengatur strict: true setara mengaktifkan banyak opsi sekaligus:

Strict mode
{
    "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.

noImplicitAny

Opsi paling dikenal dari keluarga strict:

Implicit any dilarang
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 dan strictPropertyInitialization

Nilai Kosong Harus Diakui

strictNullChecks telah dibahas di episode 3 dan menjadi tulang punggung keamanan null:

Null ditangani eksplisit
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:

Properti wajib diinisialisasi
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.

Opsi Ketat Tambahan

Di luar strict, TypeScript menyediakan pengetatan lebih jauh:

Pengetatan ekstra
{
    "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.

Migrasi Proyek ke Strict Mode

Bertahap dengan Per-File

Mengetatkan proyek lama tidak harus sekaligus. Komentar kontrol dari episode 13 menjadi pintu masuk:

Perkecil cakupan strict
// @ts-nocheck

Tambahkan // @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.

Urutan yang Disarankan

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.

Penutup

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.
  • Migrasi strict dilakukan bertahap dengan komentar per-file.

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.

Belajar TypeScript - Strict Mode, noImplicitAny, dan Kualitas Tipe | Belajar TypeScript