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

  • Dostępność w PDF - dokumenty bez barier
  • Czy wiesz, że z pomocą @starting-style można animować elementy z display: none za pomocą samego CSS?
  • Czy wiesz, że w Angular 17 została wprowadzona alternatywa dla *ngSwitch?
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

newsletter

techniczny

Zapisz się

Podobne wpisy

post-image
WCAG

Dostępność w PDF - dokumenty bez barier

author
Kacper Hoffman 28 kwi 2025
post-image
angular

Czy wiesz, że z pomocą @starting-style można animować elementy z display: none za pomocą samego CSS?

author
Piotr Tatarski 7 kwi 2025
post-image
angular

Czy wiesz, że w Angular 17 została wprowadzona alternatywa dla *ngSwitch?

author
Dorian Mejer 10 mar 2025
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

Zapisz się na

newsletter

techniczny

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ę