Tipe Kondisional TypeScript
Tipe kondisional dalam TypeScript menyediakan cara untuk membuat tipe yang bergantung pada suatu kondisi. Tipe kondisional memungkinkan fleksibilitas dan ekspresi yang lebih besar dalam definisi tipe, sehingga memungkinkan pemodelan hubungan tipe yang kompleks dengan cara yang jelas dan ringkas. Artikel ini membahas cara kerja tipe kondisional dalam TypeScript dan memberikan contoh untuk mengilustrasikan penggunaannya.
Apa itu Tipe Kondisional?
Tipe kondisional memungkinkan pembuatan tipe yang dipilih berdasarkan suatu kondisi. Tipe kondisional serupa dengan pernyataan kondisional dalam pemrograman tetapi beroperasi pada tingkat tipe. Sintaks dasar tipe kondisional adalah:
type ConditionalType = T extends U ? X : Y;
Dalam sintaksis ini:
T
adalah tipe yang sedang diperiksa.U
adalah tipe yang akan dibandingkan.X
adalah tipe yang dikembalikan jikaT
memperluasU
.Y
adalah tipe yang dikembalikan jikaT
tidak memperluasU
.
Contoh Dasar Tipe Kondisional
Berikut adalah contoh sederhana dari tipe kondisional yang mengembalikan tipe berbeda berdasarkan apakah tipe yang diberikan adalah string atau bukan:
type IsString = T extends string ? "String" : "Not a string";
type Result1 = IsString; // Result1 is "String"
type Result2 = IsString; // Result2 is "Not a string"
Dalam contoh ini, IsString
memeriksa apakah T
memperluas string
. Jika demikian, hasilnya adalah "String"
; jika tidak, hasilnya adalah "Not a string"
.
Menggunakan Tipe Kondisional dengan Tipe Generik
Tipe kondisional juga dapat digunakan dengan tipe generik untuk membuat definisi tipe yang lebih fleksibel dan dapat digunakan kembali. Misalnya, tipe yang mengekstrak tipe pengembalian suatu fungsi:
type ReturnType = T extends (...args: any[]) => infer R ? R : never;
type FunctionType = (x: number) => string;
type Result = ReturnType; // Result is string
Dalam contoh ini, ReturnType
menggunakan kata kunci infer
untuk menyimpulkan tipe pengembalian R
dari tipe fungsi T
. Jika T
adalah tipe fungsi, ReturnType
akan menjadi tipe pengembalian; jika tidak, defaultnya adalah never
.
Tipe Kondisional dengan Tipe Union
Tipe kondisional juga dapat bekerja dengan tipe gabungan untuk menangani beberapa tipe yang mungkin. Misalnya, membedakan antara anggota gabungan yang berbeda:
type ExtractString = T extends string ? T : never;
type UnionType = string | number | boolean;
type Result = ExtractString; // Result is string
Dalam contoh ini, ExtractString
mengekstrak string
dari tipe gabungan UnionType
, yang menghasilkan string
.
Tipe Kondisional dengan Pemetaan Tipe
Tipe kondisional dapat digabungkan dengan pemetaan tipe untuk membuat transformasi tipe yang lebih kompleks. Misalnya, pemetaan pada serangkaian tipe untuk menerapkan tipe kondisional:
type MapArray = {
[K in keyof T]: T[K] extends string ? T[K] : never;
};
type ArrayType = [string, number, boolean];
type MappedArray = MapArray; // MappedArray is [string, never, never]
Dalam contoh ini, MapArray
memetakan setiap elemen array T
dan menerapkan tipe kondisional ke setiap elemen, menghasilkan array di mana hanya elemen string yang dipertahankan.
Kesimpulan
Tipe kondisional dalam TypeScript merupakan alat yang ampuh untuk membuat definisi tipe yang fleksibel dan ekspresif. Dengan memanfaatkan tipe kondisional, pengembang dapat memodelkan hubungan tipe yang kompleks, menangani berbagai skenario, dan meningkatkan keamanan tipe dalam kode TypeScript mereka. Memahami cara menggunakan tipe kondisional secara efektif dapat meningkatkan kemampuan untuk menulis kode TypeScript yang tangguh dan dapat dipelihara secara signifikan.