TypeScript ships with powerful built-in utility types.
interface User {
id: number;
name: string;
email: string;
role: 'admin' | 'user';
createdAt: Date;
}
type UserUpdate = Partial<User>; // all fields optional
type FullUser = Required<User>; // all fields required
type UserPreview = Pick<User, 'id' | 'name'>; // select fields
type PublicUser = Omit<User, 'email'>; // exclude fields
// Record - key-value map type
type RolePermissions = Record<'admin' | 'user', string[]>;
// ReturnType / Parameters
function getUser() { return { id: 1, name: 'Manthan' }; }
type GetUserReturn = ReturnType<typeof getUser>;
// NonNullable - remove null and undefined
type MaybeString = string | null | undefined;
type DefiniteString = NonNullable<MaybeString>; // string
// Readonly - prevent mutations
const config: Readonly<User> = { ... };