Chapter 4

Kendala dan Batasan pada Generik

Pelajari cara mengidentifikasi dan menyelesaikan masalah umum seperti constraint yang terlalu ketat atau tipe yang tidak sesuai, serta teknik untuk memastikan generik tetap aman dan efisien dalam kode produksi.

Tips untuk Menghindari Over-engineering dan Error Umum

Penggunaan generik yang berlebihan atau tidak tepat dapat menyebabkan kode yang sulit dipelihara. Berikut tips untuk menghindari masalah umum:

MasalahSolusi
Over-engineering dengan terlalu banyak parameter tipeBatasi hingga 2-3 parameter, gunakan default values jika mungkin
Error kompilasi karena constraints yang terlalu ketatPeriksa kembali batasan dan gunakan union types untuk fleksibilitas
Kesulitan debugging tipe generikGunakan alat seperti TypeScript Playground untuk testing

Dengan pendekatan yang bijak, generik dapat meningkatkan kualitas kode tanpa menambah kompleksitas.

Memahami Kendala Generik dengan Constraints dan Type Bounds

Generik dalam TypeScript memungkinkan fleksibilitas, tetapi sering kali kita perlu membatasi tipe yang dapat digunakan untuk memastikan keamanan tipe. Kendala (constraints) menggunakan kata kunci extends untuk menentukan batasan pada parameter tipe.

  • Contoh: function logLength(arg: T): void { console.log(arg.length); } memastikan T memiliki properti length.
  • Batasan ini mencegah penggunaan tipe yang tidak sesuai, seperti angka atau boolean, yang tidak memiliki length.

Dengan constraints, Anda dapat menghindari error runtime dan meningkatkan keandalan kode.

Mengatasi Batasan dengan Default Type Parameters dan Conditional Types

Ketika generik menghadapi batasan kompleks, TypeScript menyediakan fitur seperti default type parameters dan conditional types untuk mengelola fleksibilitas dan keamanan.

  1. Default Type Parameters: Menetapkan nilai default jika tipe tidak disediakan, misalnya function identity(value: T): T { return value; }.
  2. Conditional Types: Menggunakan sintaks T extends U ? X : Y untuk menyesuaikan tipe berdasarkan kondisi, contohnya dalam utility types seperti NonNullable.

Fitur-fitur ini membantu mengatasi skenario di mana tipe mungkin tidak diketahui atau perlu adaptasi dinamis.

Studi Kasus: Mengimplementasikan Validasi Data dengan Kendala Generik

Dalam aplikasi dunia nyata, generik dengan kendala dapat digunakan untuk membangun sistem validasi data yang aman dan reusable. Misalnya, sebuah fungsi untuk memvalidasi objek pengguna dengan properti wajib.

interface User {
id: number;
name: string;
}

function validateUser(user: T): boolean {
return user.id !== undefined && user.name !== '';
}

const user1 = { id: 1, name: 'Alice' };
console.log(validateUser(user1)); // true

Dengan constraint T extends User, fungsi ini hanya menerima objek yang sesuai dengan interface User, mencegah input yang tidak valid.

Quiz

Kerjakan soal setelah membaca materi untuk memperkuat pemahaman.