catatan
Tips TypeScript Strict Mode yang Benar-benar Berguna
Beberapa kebiasaan kecil yang membuat strict mode terasa seperti bantuan, bukan hambatan.
·diperbarui 19 Agu 2026·#typescript#tips
const{Fragment:a,jsx:e,jsxs:n}=arguments[0];function _createMdxContent(i){const t={code:"code",p:"p",pre:"pre",...i.components};return n(a,{children:[n(t.p,{children:["Mengaktifkan ",e(t.code,{children:"strict: true"})," di ",e(t.code,{children:"tsconfig"})," adalah keputusan termurah dan paling berdampak yang bisa kamu ambil di sebuah basis kode TypeScript. Tapi banyak orang yang mengaktifkannya, kesal dengan ombak merah pertama, lalu menghabiskan waktu melawan compiler. Berikut beberapa kebiasaan yang membuat strict mode terasa seperti rekan, bukan musuh."]}),"\n",n(t.p,{children:["Pertama, berhenti memakai ",e(t.code,{children:"any"}),". Hampir setiap kali kamu menulis ",e(t.code,{children:"any"}),", yang kamu sebenarnya butuhkan adalah ",e(t.code,{children:"unknown"}),". ",e(t.code,{children:"unknown"})," memaksa kamu untuk mengecek tipe sebelum memakainya, yang merupakan perilaku yang kamu mau dari awal. Ini satu perubahan kecil yang menghilangkan seluruh kelas bug."]}),"\n",e(t.p,{children:"Kedua, jadikan tipe berasal dari data, bukan sebaliknya. Daripada mendefinisikan interface lalu memaksa data untuk sesuai, sering kali lebih baik membiarkan TypeScript menyimpulkan dari sumber kebenaran — sebuah skema Zod, sebuah tabel Prisma, atau konfigurasi Velite. Dengan begitu, saat data berubah, tipe ikut berubah tanpa perlu sinkronisasi manual."}),"\n",n(t.p,{children:["Ketiga, manfaatkan discriminated union untuk state. Alih-alih objek dengan banyak field opsional, gunakan properti ",e(t.code,{children:"type"})," yang konstan sehingga TypeScript bisa menyempitkan tipe secara otomatis. Ini menghapus banyak pengecekan ",e(t.code,{children:"undefined"})," yang berisiko dilewatkan."]}),"\n",e(t.pre,{children:e(t.code,{className:"language-ts",children:'type Status =\n | { type: "idle" }\n | { type: "loading" }\n | { type: "success"; data: Response }\n | { type: "error"; error: Error };\n'})}),"\n",e(t.p,{children:"Keempat, perlakukan error compiler sebagai sinyal desain, bukan gangguan. Kalau sebuah fungsi sulit diberi tipe, biasanya itu berarti fungsi tersebut mencoba melakukan terlalu banyak hal. Pecah, dan tipe akan mengikuti."}),"\n",e(t.p,{children:'Strict mode bukan tentang menulis kode yang "lebih ketat". Ini tentang membuat compiler bekerja untukmu — menangkap bug sebelum waktu kamu habis untuk debugging di produksi.'})]})}return{default:function(a={}){const{wrapper:n}=a.components||{};return n?e(n,{...a,children:e(_createMdxContent,{...a})}):_createMdxContent(a)}};