Tipe Kondisional & Terpetakan dalam React
Bangun tipe prop komponen yang bentuknya berubah berdasarkan nilai prop lain menggunakan tipe kondisional.
Tipe Kondisional & Terpetakan dalam React adalah pelajaran React Academy gratis di CoddyKit. Ini adalah pelajaran 2 dari 4. Kamu bisa membaca pelajaran lengkapnya di bawah secara gratis — lalu praktikkan langsung di browser dengan editor kode bawaan dan tutor AI 24/7. Ini adalah bagian dari jalur belajar React Academy, dan progresmu tersinkronisasi di web dan aplikasi CoddyKit. Kursus React Academy mencakup 4 pelajaran total.
Dasar-Dasar Tipe Kondisional
Tipe kondisional menggunakan sintaks T extends U ? X : Y — jika T dapat ditetapkan ke U, tipe tersebut menjadi X; jika tidak, menjadi Y.
type IsString<T> = T extends string ? true : false;
type A = IsString<string>; // true
type B = IsString<number>; // false
type C = IsString<'hello'>; // trueProperti Kondisional Berdasarkan Properti Lain
Gunakan tipe kondisional untuk menjadikan suatu properti wajib atau opsional berdasarkan nilai properti lain.
type InputProps<T extends 'text' | 'number'> = {
type: T;
} & (T extends 'number' ? { min?: number; max?: number } : { maxLength?: number });
const numInput: InputProps<'number'> = { type: 'number', min: 0, max: 100 };
const txtInput: InputProps<'text'> = { type: 'text', maxLength: 50 };Tipe Terpetakan
Tipe terpetakan membuat tipe baru dengan mengubah setiap properti dari tipe yang sudah ada. Sintaks in keyof melakukan iterasi pada semua kunci.
type Optional<T> = { [K in keyof T]?: T[K] };
type Readonly<T> = { readonly [K in keyof T]: T[K] };
type Nullable<T> = { [K in keyof T]: T[K] | null };Menjadikan Properti Opsional untuk Formulir Pembaruan
Gunakan Partial<T> (tipe terpetakan bawaan) untuk properti formulir pembaruan ketika tidak semua bidang wajib diisi.
interface User { id: string; name: string; email: string; role: string; }
// Update form — all fields optional:
type UserUpdateProps = Partial<Omit<User, 'id'>>;
function UserUpdateForm(props: UserUpdateProps) {
// name, email, role are all optional
}Record dengan Tipe Terpetakan
Buat tipe pencarian yang kuncinya berasal dari suatu gabungan dan nilainya memiliki bentuk yang konsisten.
type Status = 'idle' | 'loading' | 'success' | 'error';
type StatusConfig = Record<Status, {
label: string;
icon: React.ReactNode;
color: string;
}>;
const statusConfig: StatusConfig = {
idle: { label: 'Ready', icon: <ReadyIcon />, color: 'gray' },
loading: { label: 'Loading...', icon: <Spinner />, color: 'blue' },
success: { label: 'Done', icon: <CheckIcon />, color: 'green' },
error: { label: 'Error', icon: <XIcon />, color: 'red' },
};Memilih Kunci Wajib
Gunakan tipe kondisional dengan -? (menghapus sifat opsional) untuk mengambil hanya kunci wajib dari suatu tipe.
type RequiredKeys<T> = {
[K in keyof T]-?: undefined extends T[K] ? never : K;
}[keyof T];
interface FormData { name: string; email: string; phone?: string; }
type Required = RequiredKeys<FormData>; // 'name' | 'email'Tipe Literal Templat
Tipe literal templat menggabungkan tipe literal teks, sehingga memungkinkan penggunaan nama peristiwa bertipe, rangkaian teks kelas CSS, dan jalur API.
type EventName = 'click' | 'change' | 'focus';
type HandlerName = `on${Capitalize<EventName>}`;
// 'onClick' | 'onChange' | 'onFocus'
type ApiPath<R extends string> = `/api/${R}`;
type UserPath = ApiPath<'users'>; // '/api/users'Mengekstrak Properti Secara Kondisional
Gunakan Extract dan Exclude untuk memfilter tipe gabungan.
type AllProps = 'onClick' | 'onHover' | 'onChange' | 'style';
type EventHandlers = Extract<AllProps, `on${string}`>;
// 'onClick' | 'onHover' | 'onChange'
type NonEventProps = Exclude<AllProps, `on${string}`>;
// 'style'Tipe Terpetakan untuk Validasi Formulir
Buat tipe kesalahan validasi yang mencerminkan bentuk data formulir Anda — satu rangkaian pesan kesalahan untuk setiap bidang.
interface LoginForm { email: string; password: string; }
type FormErrors<T> = { [K in keyof T]?: string };
type LoginErrors = FormErrors<LoginForm>;
// { email?: string; password?: string }
const errors: LoginErrors = { email: 'Invalid email format' };Tipe Terpetakan Berpembeda
Gabungkan tipe terpetakan dengan tipe kondisional untuk membuat tipe yang bentuknya berubah berdasarkan pembeda.
type EventMap = {
click: { x: number; y: number };
keydown: { key: string; code: string };
resize: { width: number; height: number };
};
type Handler<E extends keyof EventMap> = (event: EventMap[E]) => void;
function on<E extends keyof EventMap>(event: E, handler: Handler<E>) {
window.addEventListener(event, handler as EventListener);
}Kapan Tidak Perlu Membuat Tipe Terlalu Rumit
Tipe kondisional dan terpetakan menambah kemampuan, tetapi juga menambah kerumitan. Gunakan keduanya ketika benar-benar menghilangkan duplikasi atau mencegah bug nyata — bukan sekadar untuk menunjukkan pengetahuan TypeScript.
Pemeriksaan Singkat
Apa yang dilakukan tipe terpetakan { [K in keyof T]?: T[K] }?
Ringkasan
Tipe kondisional (T extends U ? X : Y) membuat tipe yang bercabang berdasarkan kemampuan penetapan. Tipe terpetakan ([K in keyof T]) mengubah setiap properti suatu tipe. Gunakan keduanya untuk tipe parsial formulir pembaruan, peta peristiwa bertipe, bentuk kesalahan formulir, dan jalur API literal templat.
Pertanyaan yang Sering Diajukan
Apakah pelajaran “Tipe Kondisional & Terpetakan dalam React” gratis?
Ya — teks lengkap “Tipe Kondisional & Terpetakan dalam React” gratis dibaca di sini di web. Untuk praktiknya secara interaktif (editor kode bawaan dan tutor AI 24/7) dan buka sisa kursus React Academy, upgrade ke CoddyKit PRO. Kursus React Academy mencakup 4 pelajaran total.
Apa yang akan aku pelajari di “Tipe Kondisional & Terpetakan dalam React”?
Bangun tipe prop komponen yang bentuknya berubah berdasarkan nilai prop lain menggunakan tipe kondisional. Kamu berlatih React Academy dengan kode praktik yang langsung kamu jalankan di browser, dan tutor AI 24/7 menjawab pertanyaanmu saat kamu mengerjakan pelajaran ini.
Apakah aku perlu pengalaman untuk memulai React Academy?
Tidak diperlukan pengalaman sebelumnya. React Academy di CoddyKit dirancang untuk pemula hingga pelajar tingkat lanjut, jadi kamu bisa memulai di sini atau dari awal dan belajar sesuai kecepatan kamu sendiri. Ini adalah pelajaran 2 dari 4.
Berapa lama pelajaran “Tipe Kondisional & Terpetakan dalam React” memakan waktu?
Sebagian besar pelajaran CoddyKit memakan waktu sekitar 5–10 menit. Setiap pelajaran ringkas dan interaktif, jadi kamu membuat kemajuan stabil dan melanjutkan dari tempat kamu tinggalkan di web dan aplikasi.
Bisakah aku menulis dan menjalankan kode dalam pelajaran React Academy ini?
Ya. Setiap pelajaran React Academy menyertakan editor kode bawaan, jadi kamu menulis dan menjalankan kode nyata langsung di browser dan mendapatkan umpan balik AI instan — tidak diperlukan penyiapan lokal.
Semua pelajaran dalam kursus ini
- Union Diskriminatif untuk Varian Komponen
- Tipe Kondisional & Terpetakan dalam React
- Komponen Polimorfik dengan Prop 'as'
- Formulir Aman Tipe & Kontrak Respons API