Utility types are built-in generic types that transform other types. Common ones include Partial<T> (all optional), Required<T> (all required), Pick<T,K> (select properties), Omit<T,K> (exclude properties), and Record<K,V> (object type).
Property Modifiers:
Partial<T>: All properties optionalRequired<T>: All properties requiredReadonly<T>: All properties readonlyProperty Selection:
Pick<T, K>: Select specific propertiesOmit<T, K>: Exclude specific propertiesType Construction:
Record<K, V>: Object with keys K and values VExtract<T, U>: Extract types assignable to UExclude<T, U>: Remove types assignable to UNull Handling:
NonNullable<T>: Remove null/undefinedReturnType<T>: Get function return typeParameters<T>: Get function parameter typesinterface User {
id: number;
name: string;
email: string;
age: number;
}
// Partial - all properties optional (for updates)
type UserUpdate = Partial<User>;
// { id?: number; name?: string; email?: string; age?: number }
function updateUser(id: number, updates: Partial<User>) {
// Can pass any subset of properties
}
updateUser(1, { name: 'New Name' }); // OK
updateUser(1, { email: 'new@email.com', age: 30 }); // OK
// Required - all properties required (reverse of Partial)
interface Config {
host?: string;
port?: number;
}
type FullConfig = Required<Config>;
// { host: string; port: number } - both required now
// Readonly - prevent modifications
type ImmutableUser = Readonly<User>;
const user: ImmutableUser = { id: 1, name: 'Alice', email: 'a@b.c', age: 25 };
user.name = 'Bob'; // Error: Cannot assign to 'name' because it is read-only