Object Manipulation
interface User {
id: number;
name: string;
email: string;
age?: number;
}
type PartialUser = Partial<User>; // All optional
type RequiredUser = Required<User>; // All required
type UserName = Pick<User, 'id' | 'name'>; // Only id, name
type NoEmail = Omit<User, 'email'>; // Everything except email
type ReadonlyUser = Readonly<User>; // All readonly
Record Type
// Create object type with specific key/value types
type UserMap = Record<string, User>;
type StatusCount = Record<'active' | 'inactive', number>;
const counts: StatusCount = { active: 10, inactive: 3 };
Union Manipulation
type Status = 'active' | 'inactive' | 'pending' | 'deleted';
type ActiveStatus = Extract<Status, 'active' | 'pending'>;
// = 'active' | 'pending'
type NonDeleted = Exclude<Status, 'deleted'>;
// = 'active' | 'inactive' | 'pending'
type NonNull = NonNullable<string | null | undefined>;
// = string
Function Types
function fetchUser(id: number): Promise<User> { ... }
type FetchReturn = ReturnType<typeof fetchUser>;
// = Promise<User>
type FetchParams = Parameters<typeof fetchUser>;
// = [id: number]
type UnwrappedUser = Awaited<ReturnType<typeof fetchUser>>;
// = User
Template Literal Types
type Color = 'red' | 'blue';
type Size = 'sm' | 'lg';
type Variant = `${Color}-${Size}`;
// = 'red-sm' | 'red-lg' | 'blue-sm' | 'blue-lg'