Tipe Data Kompleks dalam TypeScript: Array, Tuple, Enum, dan Object

By | 20 October 2025

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.