cloundinary
All Articals

Common Utility Types of TypeScript

Typescript
Published onMarch 25, 2025
Read time2 min read
css

Khalid Kakar

Khalid simplifies complex modern web development topics into simple words with expertise in Next.js and React.js

Hello TypeScripters 😊

In this artical you will learn basic and common Typescript Utility types such as Partial<T> Required<T> Pick<T, K> and more. 🔥

1. Partial<T> – Make All Properties Optional 🤢

The Partial<T> utility type takes a type T and makes all its properties optional. This is useful when updating objects where only a subset of properties may be provided.

interface User {
  name: string;
  age: number;
}

interface PartialUser = Partial<User>
// { name?:string, age?:number }

2. Required<T> – Make All Properties Required 🤷‍♂️

The Required<T> utility type does the opposite of Partial<T> by ensuring that all properties of T are required.

interface User {
  name?: string;
  age?: number;
}

interface RequiredUser = Required<User>
// { name:string, age:number }

3. Readonly<T> – Make All Properties Read-Only 👏

The Readonly<T> utility type prevents properties from being modified after initialization.

interface User {
  name: string;
}
const user: Readonly<User> = { name: "Khalid" };
// user.name = "khan"; ❌ Error: Cannot assign to 'name' because it is a read-only property.

4. Pick<T, K> – Select Specific Properties 😁

The Pick<T, K> utility type extracts a subset of properties from T.

interface User {
  id: number;
  name: string;
  email: string;
}

interface NewUser = Pick<User, 'id' | 'name'>
// { id: number; name: string; }

5. Omit<T, K> – Remove Specific Properties 😉

The Omit<T, K> utility type removes specified properties from T.

interface User {
  id: number;
  name: string;
  email: string;
}

interface UserWithOutEmail = Omit<User, 'email'>
// { id: number; name: string; }

6. Record<K, T> – Define a Key-Value Object Type 🙌

The Record<K, T> utility type creates an object type where keys are K and values are T.

type Role = "admin" | "user" | "guest";

interface NewRoles = Record<Role, string> 
// { admin: string; user: string; guest: string; }

7. Extract<T, U> – Extract Common Types 🤞

The Extract<T, U> utility type extracts types from T that are also present in U.

type Status = "success" | "error" | "pending";
type AllowedStatus = Extract<Status, "success" | "error">
// "success" | "error"

8. Exclude<T, U> – Remove Certain Types 🤔

The Exclude<T, U> utility type removes types from T that match U.

type Status = "success" | "error" | "pending";
type NotPending = Exclude<Status, "pending">;
// "success" | "error"

Happy Types 😍😍🎉