Generic Constraints
Penjelasan
Kadang generic perlu dibatasi supaya hanya menerima tipe yang punya properti/method tertentu — dilakukan dengan extends di dalam deklarasi generic (T extends SesuatuInterface). Ini memastikan compiler tahu tipe T pasti punya properti yang dipakai di dalam fungsi, tanpa perlu tipe T yang benar-benar spesifik.
Contoh Konsep
interface PunyaPanjang {
length: number;
}
function cetakPanjang<T extends PunyaPanjang>(item: T): void { // T wajib punya properti length
console.log(`Panjangnya: ${item.length}`);
}
cetakPanjang("halo"); // string punya length, OK
cetakPanjang([1, 2, 3]); // array punya length, OK
// cetakPanjang(123); // Error! number tidak punya properti length
Praktikum
Buat interface PunyaId dengan properti id: number. Buat fungsi generic cariById<T extends PunyaId>(daftar: T[], id: number): T | undefined yang mencari elemen dengan id yang cocok memakai find(). Uji dengan array objek bertipe { id: number; nama: string }.
Ketik/edit bebas di sini untuk latihan — kode ini tidak dijalankan.
Tips
Generic constraint (extends) berbeda dari class extends (pewarisan) — di konteks generic, extends berarti "tipe T harus KOMPATIBEL/paling tidak punya bentuk seperti" interface yang disebutkan, bukan mewarisi implementasinya.