TypeScript Utility Types w praktyce – Partial, Pick, Omit, ReturnType, Extract i Exclude

Kod źródłowy na ekranie komputera

W tym wpisie przedstawię niektóre z utility types w Typescript które pomagają wykrywać błędy już na etapie pisania kodu, a nie dopiero w czasie jego uruchamiania.

Wbudowane Utility Types pomagają:

  • ograniczyć duplikację kodu,
  • poprawić czytelność,
  • zwiększyć bezpieczeństwo typów,
  • szybciej reagować na zmiany w modelach danych.

W tym wpisie pokażę 6 najczęściej używanych Utility Types wraz z praktycznymi przykładami:

  • Partial
  • Pick
  • Omit
  • ReturnType
  • Extract
  • Exclude

Przykładowy model danych

W przykładach posłużymy się prostym modelem użytkownika:

export interface User {
  id: number;
  name: string;
  email: string;
  password: string;
  role: "admin" | "user" | "guest";
}

Partial – wszystkie pola opcjonalne

Partial<T> zamienia wszystkie właściwości typu na opcjonalne.

Zastosowanie

  • formularze edycji,
  • aktualizacja danych (PATCH),
  • obiekty konfiguracyjne.
type UserUpdate = Partial<User>;

const updateUser = (data: UserUpdate) => {
// możemy przekazać tylko część pól
};

updateUser({
email: "nowy@email.pl"
});

Pick<T, K> – wybór konkretnych pól

Pick<T, K> pozwala wybrać tylko wskazane właściwości z danego typu.

Zastosowanie

  • DTO,
  • dane publiczne,
  • ograniczanie zakresu danych.
type UserPreview = Pick<User, "id" | "name">;

const user: UserPreview = {
id: 1,
name: "Kamil"
};

Omit<T, K> – usunięcie wybranych pól

Omit<T, K> działa odwrotnie do Pickusuwa wskazane właściwości.

Zastosowanie

  • usuwanie wrażliwych danych (np. hasła),
  • tworzenie bezpiecznych obiektów do API.
type SafeUser = Omit<User, "password">;

const safeUser: SafeUser = {
id: 1,
name: "Kamil",
email: "kamil@email.pl",
role: "admin"
};

ReturnType<T> – automatyczne wnioskowanie typu zwracanego

ReturnType<T> pobiera typ zwracany przez funkcję.

Zastosowanie

  • refaktoryzacja,
  • unikanie ręcznego definiowania typów,
  • spójność między funkcjami.
function getUser() {
return {
id: 1,
name: "Kamil",
role: "admin" as const
};
}

type GetUserResult = ReturnType<typeof getUser>;

Jeśli zmieni się implementacja funkcji, typ zmieni się automatycznie.

Extract<T, U> – wybór pasujących typów z unii

Extract<T, U> wyciąga wspólne elementy z typów unijnych.

Zastosowanie

  • systemy uprawnień.
  • filtrowanie ról,
  • typy warunkowe.
type Roles = "admin" | "user" | "guest";
type AdminRoles = Extract<Roles, "admin" | "superadmin">;
// wynik: "admin"

Exclude<T, U> – usuwanie typów z unii

Exclude<T, U> usuwa określone typy z unii.

Zastosowanie

  • walidacja danych.
  • ograniczanie dostępu,
  • logika biznesowa.
type Roles = "admin" | "user" | "guest";
type NonAdminRoles = Exclude<Roles, "admin">;
// wynik: "user" | "guest"

Podsumowanie

Utility Types w TypeScript to potężne narzędzia, które:

  • zwiększają bezpieczeństwo kodu,
  • redukują ilość ręcznie pisanych typów,
  • poprawiają czytelność i skalowalność projektu.

Mam nadzieję, że te przykłady okażą się dla Was pomocne i pozwolą szybciej oraz bezpieczniej pracować z typami w TypeScript.

Ta strona używa ciasteczek (cookies), dzięki którym nasz serwis może działać lepiej. Więcej informacji

The cookie settings on this website are set to "allow cookies" to give you the best browsing experience possible. If you continue to use this website without changing your cookie settings or you click "Accept" below then you are consenting to this.

Close