consdata.com
Blog techniczny Blog biznesowy Dział HR
EN
typescript

Czy wiesz jak używać discriminated union w języku TypeScript?

author Krzysztof Czechowski
1 grudnia 2023

Discriminated union (pol. unia dyskryminacyjna) to połączenie takich typów, z których każdy posiada jedno wspólne pole, na podstawie którego możemy określić, z jakim z nich mamy do czynienia. Zgodnie z ogólnie przyjętą konwencją jest to pole type, które jest typu Literal Type, czyli jego typ opisuje się za pomocą stringa.

Zdefiniujmy unię dyskryminacyjną oraz funkcję anonimową przypisaną do getPrice, która rozpoznaje jej typ i wykonuje zależny od niego kod:

type Invoice = {
  type: 'INVOICE',
  number: string,
  date: Date
  positions: {
    name: string
    price: number
    quantity: number
  }[],
   
}
 
type Bill = {
  type: 'BILL',
  date: Date,
  totalPrice: number
}
 
type CompanyPurchase = Invoice | Bill;
 
const getPrice = (purchase: CompanyPurchase): number => {
  switch(purchase.type) {
    case 'INVOICE':
      return purchase.positions.reduce((acc, item) => acc + item.price * item.quantity, 0);
    case 'BILL':
      return purchase.totalPrice;
    default:
      return 0;
  }
}

Typy Invoice oraz Bill mają wspólne pole type. Dzięki zastosowaniu unii dyskryminacyjnej TypeScript sam rozpoznaje konkretny typ parametru purchase w funkcji anonimowej przypisanej do zmiennej getPrice, rzutowania są zbędne.

Przykład działania: https://www.typescriptlang.org/play#code/C(…)A

Najnowsze wpisy

  • Pułapki adnotacji @Transactional
  • Czy wiesz, czym jest i jak działa Browserslist?
  • Czy wiesz, że zależności w Springu powinniśmy wstrzykiwać przez konstruktor?
Dołącz do nas

  • SENIOR FULLSTACK DEVELOPER (JAVA + ANGULAR) Poznań (hybrydowo) lub zdalnie UoP 14 900 - 20 590 PLN brutto
    B2B 19 680 - 27 220 PLN netto
  • REGULAR FULLSTACK DEVELOPER (JAVA + ANGULAR) Poznań (hybrydowo) lub zdalnie UoP 11 300 - 15 900 PLN brutto
    B2B 14 950 - 21 000 PLN netto
  • ZOBACZ WSZYSTKIE OGŁOSZENIA

Podobne wpisy

post-image
java

Pułapki adnotacji @Transactional

Najczęstsze pułapki związane z @Transactional w Springu i Hibernate - od proxy i self-invocation, przez dirty checking, po cache Hibernate.

author
Kamil Dudek 10 kwi 2026
post-image
frontend

Czy wiesz, czym jest i jak działa Browserslist?

Od czasu do czasu każda osoba pracująca nad frontendem natrafia na plik o nazwie `browserslist`. Kto z niego korzysta i na co wpływają dokonywane w nim zmiany?

author
Piotr Grobelny 27 mar 2026
post-image
spring boot

Czy wiesz, że zależności w Springu powinniśmy wstrzykiwać przez konstruktor?

Poznaj zalety tego podejścia, przykłady kodu i wskazówki dotyczące testowania oraz bezpieczeństwa aplikacji.

author
Bartosz Pietrowiak 16 mar 2026
Dołącz do nas

  • SENIOR FULLSTACK DEVELOPER (JAVA + ANGULAR) Poznań (hybrydowo) lub zdalnie UoP 14 900 - 20 590 PLN brutto
    B2B 19 680 - 27 220 PLN netto
  • REGULAR FULLSTACK DEVELOPER (JAVA + ANGULAR) Poznań (hybrydowo) lub zdalnie UoP 11 300 - 15 900 PLN brutto
    B2B 14 950 - 21 000 PLN netto
  • ZOBACZ WSZYSTKIE OGŁOSZENIA
consdata.com
  • Kontakt

    • sales@consdata.com
    • +48 61 41 51 000

  • Biuro

    • K9Office
      Krysiewicza 9/14
      61-825 Poznań
      Polska

  • Rozwiązania

    • Eximee
    • Kouncil
  • Blog Dołącz do nas
Copyright © 2024 Consdata. All rights reserved. Privacy Policy & Cookies
Chcemy używać plików cookie oraz skryptów podmiotów trzecich do polepszania funkcjonowania tej strony Zgadzam się