genericutilitytipeMenengah4 mnt baca

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.

typescript
interface Pengguna {
  id: number;
  nama: string;
  email: string;
  umur: number;
}

Partial: Semua Jadi Optional

typescript
function updatePengguna(id: number, perubahan: Partial<Pengguna>) {
  // perubahan boleh berisi sebagian field saja
}

updatePengguna(1, { nama: "Ana Baru" }); // ok, field lain tidak wajib

Tanpa Partial, kamu harus bikin interface kedua yang isinya duplikat dengan semua ?. Satu baris vs belasan baris.

Pick dan Omit: Pilih atau Buang Field

typescript
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

typescript
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>: membuang null dan undefined dari union.

Catatan teknis: Utility types hanya ada di level tipe dan hilang total saat kompilasi. Kamu tidak bisa memakai Partial sebagai value di runtime (const x = Partial itu error). Kalau butuh transformasi object sungguhan saat program jalan, tulis fungsi JavaScript biasa.