Utility Types Bawaan
Partial, Pick, Omit, Record, dan teman-temannya: transformasi tipe tanpa nulis ulang.
Tipe yang Melahirkan Tipe
TypeScript menyediakan utility types: fungsi di level tipe yang mengubah tipe lain. Tidak perlu install apa pun.
interface Pengguna {
id: number;
nama: string;
email: string;
umur: number;
}Partial: Semua Jadi Optional
function updatePengguna(id: number, perubahan: Partial<Pengguna>) {
// perubahan boleh berisi sebagian field saja
}
updatePengguna(1, { nama: "Ana Baru" }); // ok, field lain tidak wajibTanpa Partial, kamu harus bikin interface kedua yang isinya duplikat dengan semua ?. Satu baris vs belasan baris.
Pick dan Omit: Pilih atau Buang Field
type KartuPengguna = Pick<Pengguna, "id" | "nama">;
// { id: number; nama: string }
type TanpaUmur = Omit<Pengguna, "umur">;
// { id: number; nama: string; email: string }Pick mengambil field yang disebut. Omit membuang field yang disebut. Keduanya menjaga sinkronisasi otomatis: kalau Pengguna berubah, turunannya ikut berubah.
Record: Object dengan Kunci Dinamis
type Nilai = "rendah" | "sedang" | "tinggi";
const prioritas: Record<string, Nilai> = {
bugLogin: "tinggi",
typoFooter: "rendah",
};
prioritas["fiturBaru"] = "ekstrem";
// Error: Type '"ekstrem"' is not assignable to type 'Nilai'.Record<Kunci, Nilai> mengetik object yang kuncinya tidak diketahui di awal, seperti cache atau kamus terjemahan.
Lainnya yang Sering Dipakai
Required<T>: kebalikan Partial, semua field jadi wajib.Readonly<T>: semua field jadi readonly.ReturnType<typeof fn>: mengambil tipe return sebuah fungsi.NonNullable<T>: membuangnulldanundefineddari union.
Catatan teknis: Utility types hanya ada di level tipe dan hilang total saat kompilasi. Kamu tidak bisa memakai
Partialsebagai value di runtime (const x = Partialitu error). Kalau butuh transformasi object sungguhan saat program jalan, tulis fungsi JavaScript biasa.