interfaceobjectoopPemula3 mnt baca

Interface

Kontrak bentuk object yang bisa dipakai ulang, diperluas, dan diimplementasikan class.

Mendefinisikan Kontrak

Menulis tipe object inline berulang-ulang itu melelahkan. Interface memberi nama untuk bentuk object:

typescript
interface Pengguna {
  id: number;
  nama: string;
  email?: string;
  readonly dibuatPada: Date;
}

const admin: Pengguna = {
  id: 1,
  nama: "Ana",
  dibuatPada: new Date(),
};

function kirimEmail(p: Pengguna) {
  console.log(`Mengirim ke ${p.nama}`);
}

Sekarang setiap fungsi yang butuh data pengguna cukup menulis : Pengguna. Satu sumber kebenaran untuk bentuk datanya.

Interface Bisa Diperluas

typescript
interface Admin extends Pengguna {
  hakAkses: string[];
}

const super_admin: Admin = {
  id: 2,
  nama: "Budi",
  dibuatPada: new Date(),
  hakAkses: ["baca", "tulis", "hapus"],
};

extends mewarisi semua properti Pengguna lalu menambah milik sendiri. Pola ini rapi untuk hierarki data seperti user biasa vs admin.

Interface untuk Method

typescript
interface DapatDisimpan {
  simpan(): void;
  muat(id: number): boolean;
}

Class bisa implements DapatDisimpan, dan compiler memastikan semua method-nya ada dengan signature yang benar. Lupa satu method? Error saat kompilasi, bukan saat user klik tombol yang rusak.

Catatan teknis: Interface hanya untuk bentuk object/class. Untuk union (string | number), tuple, atau tipe fungsi, pakai type alias (modul berikutnya). Aturan praktis: butuh extends atau implements untuk object? Interface. Selain itu? Type alias.