Tipe data kompleks dalam TypeScript adalah pondasi penting untuk mengelola struktur data yang lebih rumit daripada tipe data primitif. Saat membangun aplikasi berskala besar, kamu tidak hanya bekerja dengan angka atau string, tetapi juga kumpulan data, pasangan nilai, dan struktur objek yang lebih kompleks. Artikel ini akan membahas tipe data kompleks seperti array, tuple, enum, dan object serta konsep penting type inference dan type annotation.
Sebagai bahasa yang berbasis pada JavaScript, TypeScript menambahkan kemampuan pengetikan statis untuk menjaga konsistensi data. Dengan sistem tipe ini, developer dapat menulis kode yang lebih aman, mudah dibaca, dan minim kesalahan sejak awal. Mari kita bahas satu per satu tipe data kompleks yang sering digunakan dalam proyek nyata.
1. Array
Array digunakan untuk menyimpan sekumpulan nilai dengan tipe data yang sama. TypeScript memungkinkan kita mendefinisikan tipe data dalam array agar lebih terkontrol.
let angka: number[] = [10, 20, 30]; let nama: string[] = ["Andi", "Budi", "Citra"];
Selain itu, kamu juga bisa menggunakan generic array type:
let skor: Array<number> = [90, 85, 75];
Jika kamu mencoba menambahkan tipe data yang berbeda ke dalam array, TypeScript akan menampilkan error saat kompilasi:
angka.push("lima"); // ❌ Error, harus number
2. Tuple
Tuple mirip dengan array, tetapi memiliki panjang tetap dan tipe data berbeda di setiap elemennya. Tipe ini berguna ketika kamu ingin menyimpan data yang posisinya sudah pasti.
let user: [string, number] = ["Arvian", 25];
Artinya, elemen pertama harus string, dan elemen kedua harus number.
Jika urutan atau tipe diubah, TypeScript akan menolak kompilasi:
user = [25, "Arvian"]; // ❌ Error
Tuple sering digunakan untuk mengembalikan lebih dari satu nilai dari sebuah fungsi:
function getData(): [string, boolean] {
return ["Selesai", true];
}
3. Enum
Enum (enumeration) digunakan untuk mendefinisikan sekumpulan nilai konstan yang saling terkait. Tipe ini membuat kode lebih mudah dibaca dan dipelihara.
enum Status {
Pending,
InProgress,
Completed
}
let pekerjaan: Status = Status.InProgress;
console.log(pekerjaan); // Output: 1
Secara default, nilai enum dimulai dari 0, tetapi kamu dapat mengatur nilai awal secara manual:
enum Arah {
Utara = 1,
Selatan,
Timur,
Barat
}
Enum juga bisa berupa string enum:
enum Role {
Admin = "ADMIN",
User = "USER",
Guest = "GUEST"
}
Enum sangat membantu ketika kamu bekerja dengan status, role, atau kategori yang tetap.
4. Object
Object merupakan tipe data kompleks yang paling sering digunakan. Di TypeScript, object dapat didefinisikan secara eksplisit menggunakan type annotation atau interface.
let produk: {
nama: string;
harga: number;
stok: boolean;
} = {
nama: "Kopi Arabica",
harga: 50000,
stok: true
};
Jika kamu mencoba menambahkan properti yang tidak sesuai tipe, TypeScript akan memberi peringatan. Ini memastikan struktur data tetap konsisten di seluruh proyek.
5. Type Inference dan Type Annotation
Type Annotation
Type annotation berarti kamu secara eksplisit menyebutkan tipe data dari variabel.
Contoh:
let umur: number = 30; let nama: string = "Dina";
Pendekatan ini sangat berguna untuk menjaga kejelasan kode dan menghindari kesalahan ketika bekerja dalam tim besar.
⚙️ Type Inference
Type inference adalah kemampuan TypeScript untuk menebak tipe data secara otomatis berdasarkan nilai yang diberikan.
let kota = "Bandung"; // otomatis dianggap string let jumlah = 10; // otomatis dianggap number
Artinya, kamu tidak selalu harus menulis tipe data secara manual — TypeScript cukup pintar untuk mengenalinya dari konteks.
Namun, jika nilai awal tidak diberikan, maka tipe data akan dianggap any, yang sebaiknya dihindari karena menghilangkan manfaat dari sistem tipe statis.
Contoh Kombinasi Tipe Data Kompleks
Berikut contoh penggunaan tipe data kompleks yang digabungkan dalam satu struktur:
enum Level {
Beginner,
Intermediate,
Advanced
}
let pengguna: {
nama: string;
umur: number;
skill: string[];
status: [boolean, string];
level: Level;
} = {
nama: "Fahri",
umur: 22,
skill: ["TypeScript", "React", "Node.js"],
status: [true, "Aktif"],
level: Level.Intermediate
};
Dengan pendekatan ini, kode menjadi lebih terstruktur dan mudah dikelola, terutama saat aplikasi berkembang semakin besar.
Kesimpulan
Memahami tipe data kompleks dalam TypeScript adalah langkah penting menuju penulisan kode yang rapi, aman, dan terukur. Dengan mengenal array, tuple, enum, dan object, kamu dapat mengelola berbagai bentuk data dengan lebih fleksibel. Ditambah dengan konsep type inference dan type annotation, kamu bisa menulis kode yang lebih efisien tanpa mengorbankan kejelasan tipe.
Langkah berikutnya setelah ini adalah mempelajari fungsi dan parameter dalam TypeScript, termasuk cara mendeklarasikan tipe data untuk argumen dan nilai kembalian agar kode kamu semakin kuat dan profesional.