Study
TypeScript

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 }.

Editor Latihan

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.