Kategoria: TypeScript

Omit, Pick i Record w TypeScript - czym są i jak ich używać?


TypeScript to rozszerzenie języka JavaScript, które pozwala na statyczne typowanie zmiennych, funkcji i obiektów. Dzięki temu można uniknąć wielu błędów w trakcie kompilacji i lepiej zrozumieć strukturę kodu. Jednym z najpotężniejszych narzędzi dostępnych w TypeScript są typy pomocnicze. W tym artykule skupimy się na trzech użytecznych typach pomocniczych: Omit, Record i Pick.

Typ Omit

Typ Omit pozwala na tworzenie nowego typu danych na podstawie istniejącego, ale pomijając niektóre jego właściwości. Składnia Omit wygląda następująco:

type Omit<T, K extends keyof T> = Pick<T, Exclude<keyof T, K>>

Gdzie:

  • T: to jest typ, z którego chcemy wybrać właściwości.
  • K: to jest zestaw kluczy, które chcemy pominąć.

Przykład użycia typu Omit:

Załóżmy, że mamy interfejs dla obiektu reprezentującego użytkownika:

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

Jeśli chcemy stworzyć nowy typ UserWithoutId, który będzie oparty na interfejsie User, ale nie będzie zawierał właściwości id, możemy to zrobić za pomocą typu Omit:

type UserWithoutId = Omit<User, 'id'>
// Użycie: const user: UserWithoutId = { name: 'John Doe', email: '[email protected]', age: 30 }

Typ Record

Typ Record pozwala na tworzenie nowego typu, który składa się z określonych kluczy i odpowiadających im typów wartości. Składnia Record wygląda następująco:

type Record<K extends keyof any, T> = { [P in K]: T }

Gdzie:

  • K: to jest zestaw kluczy, które chcemy zawrzeć w nowym typie.
  • T: to jest typ, który będzie odpowiadał każdemu z tych kluczy.

Przykład użycia typu Record:

Załóżmy, że mamy typ dla statusów zamówienia:

type OrderStatus = 'new' | 'processing' | 'completed' | 'cancelled'

Teraz możemy użyć typu Record, aby stworzyć słownik, który przyporządkowuje każdemu z tych statusów opis:

type OrderStatusMap = Record<OrderStatus, string>
// Użycie: const statusMap: OrderStatusMap = { new: 'Nowe zamówienie', processing: 'W trakcie realizacji', completed: 'Zrealizowane', cancelled: 'Anulowane' }

Typ Pick

Typ Pick pozwala na stworzenie nowego typu, wybierając tylko określone właściwości z istniejącego typu. Składnia Pick wygląda następująco:

type Pick<T, K extends keyof T> = { [P in K]: T[P] }

Gdzie:

  • T: to jest typ, z którego chcemy wybrać właściwości.
  • K: to jest zestaw kluczy, które chcemy zawrzeć w nowym typie.

Przykład użycia typu Pick:

Załóżmy, że mamy interfejs dla obiektu reprezentującego produkt:

interface Product {
    id: number
    name: string
    price: number
    category: string
}

Jeśli chcemy stworzyć nowy typ ProductSummary, który będzie zawierał tylko właściwości name i price, możemy to zrobić za pomocą typu Pick:

type ProductSummary = Pick<Product, 'name' | 'price'>
// Użycie: const product: ProductSummary = { name: 'Smartphone', price: 999 }

Podsumowanie

Typy Omit, Record i Pick są potężnymi narzędziami w języku TypeScript, które pozwalają na elastyczne manipulowanie typami danych. Typ Omit pozwala na tworzenie nowych typów poprzez pomijanie wybranych właściwości, typ Record umożliwia definiowanie słowników z określonymi kluczami i typami wartości, natomiast typ Pick pozwala na tworzenie nowych typów przez wybieranie tylko wybranych właściwości z istniejącego typu. Dzięki nim, możemy bardziej precyzyjnie definiować struktury danych i unikać niepożądanych błędów w naszym kodzie.