# TypeScript: Lebih dari Sekadar Tipe, Ia Adalah Garis Depan Keamanan Perangkat Lunak

Pernahkah Anda terbangun jam 2 pagi, tiba-tiba teringat satu baris kode yang mungkin menjadi pintu masuk bagi peretas? Bagi kita yang membangun di atas ekosistem JavaScript, kebebasan adalah anugerah sekaligus kutukan. Kita bisa membuat apa saja dengan cepat, tapi kita juga bisa menghancurkan segalanya dengan satu kecerobohan.

Di sinilah **TypeScript** hadir. Ia bukan sekadar alat untuk memunculkan "garis merah" di VS Code. Bagi saya, TypeScript adalah **filosofi pertahanan**. Ia adalah upaya kita untuk menanamkan hukum fisika ke dalam dunia digital yang liar.

## 1\. Menolak "Eksistensi yang Ilegal"

Dalam fisika, atom tidak bisa berada di dua tempat secara bersamaan karena ada hukum yang mengaturnya. Dalam koding, kita sering membiarkan "data ilegal" eksis—seperti variabel yang harusnya string tapi tiba-tiba berisi *payload* peretas.

Konsep utama yang saya pegang adalah: **Make Illegal States Unrepresentable.**

Dengan TypeScript, kita mendefinisikan batas-batas realitas aplikasi kita. Jika sebuah fungsi tidak boleh menerima data selain alfanumerik, TypeScript akan menolaknya sebelum peretas sempat mencoba. Kita tidak hanya memperbaiki bug; kita **menghilangkan kemungkinan** bug itu untuk lahir.

## 2\. unknown: Mengakui Bahwa Kita Tidak Tahu

Keangkuhan terbesar developer adalah menganggap semua input dari luar (user, API, database) akan selalu baik-baik saja. Menggunakan `any` adalah bentuk pengabaian terhadap bahaya.

TypeScript mengajarkan kita kerendahan hati melalui tipe `unknown`.

* **any:** "Saya percaya ini aman, jalankan saja!" (Pintu masuk RCE).
    
* **unknown:** "Saya tidak tahu apa ini. Saya tidak akan menyentuhnya sampai saya bisa membuktikan bahwa ini aman."
    

Inilah **Zero-Trust Architecture** di tingkat kode. Kita berhenti berasumsi dan mulai memvalidasi.

## 3\. Branded Types: Menciptakan "Sertifikat Keamanan"

Dalam proyek-proyek sensitif (seperti saat saya membangun [**Shofia.ai**](http://Shofia.ai)), membedakan mana data "mentah" dan mana data yang "bersih" adalah harga mati.

Bayangkan Anda memiliki dua gelas air. Satu dari keran, satu sudah direbus. Keduanya terlihat sama (keduanya adalah string). Tanpa label, Anda bisa saja meminum air mentah. **Branded Types** di TypeScript adalah label permanen tersebut. Ia memastikan bahwa fungsi sensitif kita (seperti pengolah database) **hanya** mau menerima air yang sudah memiliki label "Sudah Steril".

TypeScript

```plaintext
// Hanya data yang sudah melewati 'pintu sanitasi' yang bisa menyentuh sistem utama
type SanitizedInput = string & { readonly __brand: "Secure" };
```

## 4\. Keamanan adalah Dialog, Bukan Sekadar Aturan

Sebagai pengajar (di **PPQITA** atau **AkarMasa**), saya selalu menekankan bahwa TypeScript mengubah koding menjadi sebuah dialog.

* **JavaScript:** Anda memerintah, komputer mencoba (dan mungkin meledak).
    
* **TypeScript:** Anda berdiskusi dengan komputer. "Saya ingin data ini masuk," dan komputer menjawab, "Tunggu dulu, apakah kamu sudah memikirkan jika datanya kosong?"
    

Dialog inilah yang mencegah serangan **DoS (Denial of Service)** atau **Logic Flaws** yang sering dimanfaatkan peretas. Kita dipaksa untuk memikirkan "Unhappy Path"—skenario terburuk di mana segalanya salah.

## 5\. Menuju Masa Depan yang Lebih Tangguh

Dunia siber semakin berbahaya. Serangan *zero-click* dan eksploitasi memori terus mengintai. Menggunakan TypeScript adalah langkah pertama kita untuk bermigrasi dari mentalitas "asal jalan" ke mentalitas **"aman sejak dalam pikiran"**.

Bagi saya, menulis tipe data yang ketat adalah cara saya menghormati pengguna. Ini adalah janji bahwa data mereka tidak akan bocor hanya karena saya lupa mengecek satu variabel `undefined`.

---

### Penutup

Keamanan bukan fitur yang bisa ditambahkan di akhir proyek. Ia adalah fondasi yang harus dibangun sejak baris kode pertama. TypeScript adalah kompas yang memastikan kita tetap berada di jalur yang benar, bahkan saat badai *deadline* menerjang.

**Mari membangun lebih dari sekadar aplikasi. Mari membangun kepercayaan.**
