Menengah Exercism • typescript

Utility Types (Tipe Utilitas)

Ringkasan Pelajaran

Kuasai utility types bawaan TypeScript seperti Partial, Readonly, Pick, dan Omit.

Utility Types (Tipe Utilitas)

TypeScript menyediakan beberapa utility types untuk memfasilitasi transformasi tipe yang umum. Utilitas ini tersedia secara global.

Partial<Type>

Membangun tipe dengan semua properti dari Type diatur sebagai opsional. Ini sangat berguna untuk fungsi “update”.

interface Todo {
  title: string;
  description: string;
}

function updateTodo(todo: Todo, fieldsToUpdate: Partial<Todo>) {
  return { ...todo, ...fieldsToUpdate };
}

const todo1 = { title: "atur meja", description: "bersihkan kekacauan" };
const todo2 = updateTodo(todo1, { description: "buang sampah" });

Readonly<Type>

Membangun tipe dengan semua properti dari Type diatur sebagai readonly, yang berarti properti dari tipe yang dibangun tidak dapat ditetapkan kembali (reassigned).

interface Todo {
  title: string;
}

const todo: Readonly<Todo> = { title: "Hapus pengguna yang tidak aktif" };
todo.title = "Halo"; // Error: Cannot assign to 'title' because it is a read-only property.

Pick<Type, Keys>

Membangun tipe dengan mengambil sekumpulan properti Keys (string literal atau gabungan string literal) dari Type.

interface Todo {
  title: string;
  description: string;
  completed: boolean;
}

type TodoPreview = Pick<Todo, "title" | "completed">;

const todo: TodoPreview = {
  title: "Bersihkan kamar",
  completed: false,
};

Omit<Type, Keys>

Membangun tipe dengan mengambil semua properti dari Type dan kemudian menghapus Keys (string literal atau gabungan string literal).

interface Todo {
  title: string;
  description: string;
  completed: boolean;
}

type TodoInfo = Omit<Todo, "completed">;

const todo: TodoInfo = {
  title: "Bersihkan kamar",
  description: "Sapu dan pel lantai",
};

Record<Keys, Type>

Membangun tipe objek yang kunci propertinya adalah Keys dan nilai propertinya adalah Type. Utilitas ini dapat digunakan untuk memetakan properti dari satu tipe ke tipe lainnya.

interface PageInfo {
  title: string;
}

type Page = "home" | "about" | "contact";

const nav: Record<Page, PageInfo> = {
  about: { title: "tentang kami" },
  contact: { title: "kontak" },
  home: { title: "beranda" },
};

Utilitas ini sangat penting untuk menjaga definisi tipe Anda tetap DRY (Don’t Repeat Yourself) dan membuat kode Anda lebih ekspresif.