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: "john.doe@example.com",
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.