Lewati ke konten

Optional Property

Setelah halaman ini, kamu dapat membuat properti opsional pada interface menggunakan tanda ? dan mengakses nilainya dengan aman.


Kita sudah belajar properti opsional pada tipe objek biasa di BAB 6. Di dalam interface, konsep properti opsional bekerja dengan cara yang sama persis: menggunakan tanda tanya ? untuk menandai properti yang boleh tidak diisi.


Tambahkan tanda tanya ? di antara nama properti dan titik dua : pada deklarasi interface:

📄 TypeScript
interface Siswa {
nama: string;
nomorHP?: string; // opsional
}

Saat mengisi formulir pendaftaran, terdapat kolom “Nomor Fax”. Kebanyakan siswa tidak memiliki mesin fax di rumahnya. Oleh karena itu, di sebelah label dituliskan tanda kurung: (Opsional / Boleh Kosong).

🖥️ Output
Formulir (Interface)
├── Nama Lengkap (Wajib)
├── Alamat (Wajib)
└── Nomor Fax (Opsional ?)

Siswa yang tidak punya fax bisa mengosongkan kolom tersebut dan formulir mereka tetap diterima secara sah oleh sekolah.


Buat src/bab7/optional-property.ts:

📄 TypeScript
interface ProfilSiswa {
nama: string;
kelas: string;
email?: string; // properti opsional
}
// 1. Objek tanpa properti opsional (valid)
const siswaA: ProfilSiswa = {
nama: "Putra",
kelas: "XI RPL 1"
}
// 2. Objek dengan properti opsional (valid)
const siswaB: ProfilSiswa = {
nama: "Budi",
kelas: "XI RPL 2",
email: "budi@smk.sch.id"
}
function cetakSiswa(s: ProfilSiswa): void {
// Gunakan nullish coalescing untuk mengamankan nilai opsional
const emailTampil = s.email ?? "(Email belum diisi)"
console.log(`Nama: ${s.nama.padEnd(6)} | Email: ${emailTampil}`)
}
console.log("=== Cetak Profil ===")
cetakSiswa(siswaA)
cetakSiswa(siswaB)

Jalankan:

🖥️ Output
tsx src/bab7/optional-property.ts
🖥️ Output
=== Cetak Profil ===
Nama: Putra | Email: (Email belum diisi)
Nama: Budi | Email: budi@smk.sch.id

  • email?: string; — tanda ? menandakan properti boleh dilewatkan.
  • siswaA dibuat tanpa email. TypeScript tidak menampilkan error.
  • s.email ?? "(Email belum diisi)" — karena email siswa A bernilai undefined, operator ?? menggantinya dengan nilai default cadangan agar tampilan rapi.

❌ Mengakses metode properti opsional langsung tanpa pengaman

Section titled “❌ Mengakses metode properti opsional langsung tanpa pengaman”
📄 TypeScript
console.log(siswaA.email.toUpperCase()) // Error saat runtime jika email undefined!
// Cannot read properties of undefined (reading 'toUpperCase')

Perbaikan: Selalu gunakan Optional Chaining (?.) saat berinteraksi dengan properti opsional yang tipe datanya berupa objek/string/array:

📄 TypeScript
console.log(siswaA.email?.toUpperCase()) // ✓ Aman, menghasilkan undefined

Buat interface Komputer dengan properti wajib merk dan properti opsional antivirus (string). Buat satu objek komputer tanpa antivirus dan satu objek dengan antivirus, lalu tampilkan nama antivirusnya dengan aman menggunakan ?. atau ??.


  • Tanda ? membuat properti pada interface bersifat opsional (boleh tidak diisi).
  • Properti opsional otomatis memiliki tipe gabungan tipeData | undefined.
  • Gunakan optional chaining ?. dan nullish coalescing ?? saat mengakses nilainya agar program bebas crash.