Utility Types
Built-in mapped and conditional types
interface User {
id: number;
name: string;
email: string;
role: "admin" | "user";
}
// Partial: all fields optional — good for update payloads
type UpdateData = Partial<User>;
const change: UpdateData = { name: "Alice" };
console.log(change);
// Pick: select specific fields
type UserPreview = Pick<User, "id" | "name">;
const preview: UserPreview = { id: 1, name: "Alice" };
console.log(preview);
// Omit: exclude specific fields
type PublicUser = Omit<User, "email">;
const pub: PublicUser = { id: 2, name: "Bob", role: "user" };
console.log(pub);
// Record: map keys to values
type RoleCount = Record<User["role"], number>;
const counts: RoleCount = { admin: 3, user: 42 };
console.log(counts);
// Readonly: immutable snapshot (shallow)
type Frozen = Readonly<User>;
const user: Frozen = { id: 3, name: "Carol", email: "c@x.io", role: "admin" };
// user.name = "Dana"; // compile error