Chapter 3

Generik pada Kelas dan Interface

Pelajari cara mengimplementasikan generik dalam kelas dan interface untuk menciptakan komponen yang dapat digunakan kembali dengan tipe yang aman, serta pahami penerapannya dalam pengembangan aplikasi TypeScript yang scalable.

Studi Kasus: Membangun Sistem Inventory dengan Kelas dan Interface Generik

Bayangkan sebuah sistem inventory untuk toko online yang perlu mengelola produk dengan atribut berbeda, seperti Product dengan id, name, dan price. Dengan generik, Anda dapat membuat kelas Inventory<T extends Product> dan interface Sortable<T> untuk menangani operasi seperti penambahan, pencarian, dan pengurutan.

Toko "TechGadget" membutuhkan sistem untuk melacak stok produk elektronik dan aksesori dengan tipe data yang bervariasi.
Konteks proyek inventory
Langkah ImplementasiOutput
Deklarasi interface ProductStruktur dasar untuk semua produk
Pembuatan kelas Inventory<T>Koleksi produk dengan metode add dan find
Penerapan interface Sortable<T>Kemampuan mengurutkan berdasarkan harga atau nama

Studi kasus ini menunjukkan bagaimana generik memungkinkan solusi yang reusable dan type-safe untuk masalah dunia nyata.

Menerapkan Generik pada Kelas dengan Multiple Type Parameters

Kelas generik dapat menggunakan lebih dari satu parameter tipe untuk menangani kompleksitas data, seperti dalam kasus struktur Map atau Response yang memerlukan beberapa tipe. Contohnya, kelas Response<T, E> dapat memiliki properti data bertipe T dan error bertipe E, memungkinkan penanganan respons yang lebih dinamis.

class Response<T, E> {
data: T;
error: E | null;
constructor(data: T, error: E | null = null) {
this.data = data;
this.error = error;
}
}

Dengan multiple type parameters, Anda dapat membuat kode yang lebih ekspresif dan mudah dipelihara untuk skenario seperti API calls atau state management.

Tips dan Peringatan untuk Penggunaan Generik yang Efektif

Meskipun generik sangat powerful, penggunaannya memerlukan perhatian untuk menghindari kompleksitas berlebihan atau kesalahan tipe. Berikut adalah panduan praktis:

  1. Gunakan nama parameter tipe yang deskriptif, seperti T untuk tipe umum, K untuk key, dan V untuk value, agar kode lebih mudah dibaca.
  2. Hindari over-engineering dengan terlalu banyak parameter tipe; batasi hingga 2-3 untuk menjaga kesederhanaan.
  3. Manfaatkan constraints dengan extends untuk membatasi tipe, misalnya <T extends string | number>, guna memastikan keamanan dan validasi.
Catatan: Selalu uji implementasi generik dengan berbagai tipe data untuk memverifikasi fleksibilitas dan keakuratan tipe.

Dengan menerapkan tips ini, Anda dapat memaksimalkan manfaat generik sambil menjaga kode tetap maintainable dan bug-free.

Menggunakan Generik pada Interface untuk Pola Desain yang Fleksibel

Interface generik sangat berguna untuk mendefinisikan kontrak yang dapat digunakan kembali di berbagai bagian aplikasi, seperti dalam pola Repository atau Service. Misalnya, interface Repository<T> dapat mendeklarasikan metode seperti findById(id: string): T dan save(entity: T): void, yang dapat diimplementasikan untuk tipe data apa pun.

  • Keuntungan: Meningkatkan modularitas dan memudahkan pengujian dengan mock objects.
  • Contoh Praktis: interface Cache<T> { get(key: string): T | undefined; set(key: string, value: T): void; }

Dengan interface generik, Anda dapat menciptakan abstraksi yang kuat dan scalable untuk arsitektur perangkat lunak.

Mengenal Konsep Generik pada Kelas dan Interface

Generik dalam TypeScript memungkinkan kelas dan interface untuk bekerja dengan berbagai tipe data tanpa kehilangan keamanan tipe, meningkatkan fleksibilitas dan reusability kode. Dengan menggunakan parameter tipe seperti <T>, Anda dapat mendefinisikan struktur yang dapat diadaptasi untuk berbagai skenario, seperti membuat kelas Stack yang dapat menyimpan tipe data apa pun.

KomponenContoh Penggunaan
Kelas Generikclass Box<T> { content: T; }
Interface Generikinterface Pair<K, V> { key: K; value: V; }

Pendekatan ini mengurangi duplikasi kode dan memastikan konsistensi tipe di seluruh aplikasi.

Quiz

Kerjakan soal setelah membaca materi untuk memperkuat pemahaman.