Penjelasan Tipe Lanjutan TypeScript dengan Contoh

TypeScript menawarkan beberapa tipe lanjutan yang melampaui tipe dasar, sehingga memungkinkan sistem tipe yang lebih fleksibel dan canggih. Tipe lanjutan ini membantu dalam menciptakan aplikasi yang tangguh dengan menyediakan cara tambahan untuk mendefinisikan dan menegakkan batasan tipe. Artikel ini membahas beberapa tipe lanjutan ini dengan contoh.

Jenis-jenis Serikat Pekerja

Tipe gabungan memungkinkan variabel menjadi salah satu dari beberapa tipe. Ini berguna saat nilai dapat memiliki beberapa tipe tetapi harus ditangani dengan tepat berdasarkan tipe sebenarnya.

// Union type example

function formatValue(value: string | number): string {
  if (typeof value === 'string') {
    return `String: ${value}`;
  } else {
    return `Number: ${value.toFixed(2)}`;
  }
}

console.log(formatValue("Hello"));
console.log(formatValue(123.456));

Dalam contoh ini, fungsi `formatValue` menerima string atau angka dan memformat nilainya sesuai dengan itu.

Jenis Persimpangan

Tipe interseksi menggabungkan beberapa tipe menjadi satu. Objek tipe interseksi akan memiliki semua properti tipe gabungan. Ini berguna untuk menggabungkan beberapa tipe menjadi satu.

// Intersection type example

interface Person {
  name: string;
  age: number;
}

interface Contact {
  email: string;
  phone: string;
}

type Employee = Person & Contact;

const employee: Employee = {
  name: "John Doe",
  age: 30,
  email: "[email protected]",
  phone: "123-456-7890"
};

console.log(employee);

Di sini, tipe `Karyawan` merupakan persimpangan antara `Orang` dan `Kontak`, artinya tipe ini berisi properti dari kedua antarmuka.

Tipe Literal

Tipe literal menentukan nilai pasti yang dapat dimiliki oleh suatu variabel. Hal ini khususnya berguna untuk memastikan bahwa hanya nilai tertentu saja yang diizinkan.

// Literal type example

type Direction = "up" | "down" | "left" | "right";

function move(direction: Direction): void {
  console.log(`Moving ${direction}`);
}

move("up");    // Valid
move("down");  // Valid
// move("side"); // Error: Argument of type '"side"' is not assignable to parameter of type 'Direction'.

Tipe `Direction` di sini dibatasi hingga empat nilai string spesifik, yang memastikan bahwa hanya arah ini yang dapat digunakan dalam fungsi `move`.

Jenis Tuple

Tipe tuple mewakili array dengan jumlah elemen tetap, di mana setiap elemen dapat memiliki tipe berbeda. Tuple berguna untuk mewakili koleksi item heterogen berukuran tetap.

// Tuple type example

let user: [string, number] = ["Alice", 30];

console.log(user[0]); // "Alice"
console.log(user[1]); // 30

// user = [30, "Alice"]; // Error: Type 'number' is not assignable to type 'string'.

Tupel `user` didefinisikan dengan string diikuti oleh angka, dan struktur ini harus dipertahankan.

Tipe Kondisional

Tipe kondisional memungkinkan tipe ditentukan berdasarkan kondisi. Tipe kondisional menyediakan cara untuk memilih satu tipe atau lainnya berdasarkan kondisi.

// Conditional type example

type IsString = T extends string ? "Yes" : "No";

type Test1 = IsString;  // "Yes"
type Test2 = IsString;  // "No"

Dalam contoh ini, tipe `IsString` memeriksa apakah tipe `T` adalah string. Ia mengembalikan `"Yes"` jika ya dan `"No"` jika tidak.

Jenis yang Dipetakan

Tipe yang dipetakan memungkinkan pembuatan tipe baru dengan mengubah properti tipe yang sudah ada. Ini berguna untuk memodifikasi atau memperluas tipe yang sudah ada.

// Mapped type example

type ReadonlyPerson = {
  readonly [K in keyof Person]: Person[K];
};

const readonlyPerson: ReadonlyPerson = {
  name: "Alice",
  age: 30
};

// readonlyPerson.age = 31; // Error: Cannot assign to 'age' because it is a read-only property.

Tipe `ReadonlyPerson` mengubah tipe `Person` dengan membuat semua propertinya hanya-baca.

Kesimpulan

Tipe-tipe tingkat lanjut TypeScript menyediakan alat-alat yang hebat untuk mendefinisikan dan mengelola persyaratan tipe yang kompleks. Dengan memanfaatkan tipe-tipe union, interchange, literal, tuple, conditional, dan mapped, pengembang dapat membuat aplikasi yang lebih tangguh dan mudah dipelihara. Memahami dan menerapkan tipe-tipe ini secara efektif dapat meningkatkan keamanan dan fleksibilitas tipe kode TypeScript secara signifikan.