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:
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
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
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: butuhextendsatauimplementsuntuk object? Interface. Selain itu? Type alias.