Back

TypeScript Extract Utility Type

`Extract< T, U >` extracts from type `T` only those types that are assignable to `U`. It filters values matching `U` within union types.

Basic Extract Usage

type Status = "pending" | "approved" | "rejected";
  type ApprovedOrRejected = Extract<Status, "approved" | "rejected">;
  
  const status: ApprovedOrRejected = "approved";
  
  console.log(status);
  // Output: approved

`Extract` allows extracting a subset from a union type, e.g., filtering `approved` and `rejected` from `Status`.

Safe Role Definitions

type Roles = "admin" | "user" | "guest";
  type PublicRoles = Extract<Roles, "user" | "guest" | "anonymous">;
  
  const role: PublicRoles = "guest";
  
  console.log(role);
  // Output: guest

Use `Extract` to expose only specific roles to users, excluding irrelevant ones like `anonymous`.

Real-World Example: Separating Error Types

type ResponseTypes = "success" | "error" | "timeout";
  type ErrorCases = Extract<ResponseTypes, "error" | "timeout">;
  
  const error: ErrorCases = "timeout";
  
  console.log(error);
  // Output: timeout

`Extract` helps isolate error cases like `error` and `timeout` from API response unions.

When to Use Extract?

`Extract` is especially useful for defining type-safe subsets and working with discriminated unions.

Back