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