TypeScript menyediakan utility types bawaan:
Partial<T> — semua property jadi opsional:
interface User { nama: string; umur: number; }
type PartialUser = Partial<User>; // { nama?: string; umur?: number; }
Required<T> — semua property jadi wajib
Pick<T, K> — ambil property tertentu:
type UserName = Pick<User, "nama">; // { nama: string }
Omit<T, K> — hapus property tertentu:
type NoAge = Omit<User, "umur">; // { nama: string }
Record<K, V> — object dengan key dan value type:
type Scores = Record<string, number>;
const skor: Scores = { math: 90, science: 85 };
Readonly<T> — semua property readonly
ReturnType<T> — tipe return dari fungsi:
function getUser() { return { nama: "Budi", umur: 17 }; }
type UserType = ReturnType<typeof getUser>; // { nama: string; umur: number }
Parameters<T> — tipe parameter dari fungsi (sebagai tuple):
function kirim(to: string, pesan: string, prioritas: number) {}
type KirimArgs = Parameters<typeof kirim>;
// [string, string, number]
Berguna saat kamu ingin membungkus (wrap) fungsi lain tanpa mengetik ulang parameternya.
Awaited<T> — membuka tipe Promise<...>:
type A = Awaited<Promise<string>>; // string
type B = Awaited<Promise<Promise<number>>>; // number (auto-unwrap)
Exclude<T, U> dan Extract<T, U> — operasi set pada union:
type Arah = "up" | "down" | "left" | "right";
type Horizontal = Extract<Arah, "left" | "right">; // "left" | "right"
type Vertikal = Exclude<Arah, "left" | "right">; // "up" | "down"
Extract<T, U>— simpan hanya anggota T yang juga ada di U.Exclude<T, U>— buang anggota T yang ada di U.
NonNullable<T> — buang null dan undefined:
type Raw = string | null | undefined;
type Aman = NonNullable<Raw>; // string