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:
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.