Unia (A | B)

Typ, który może być jednym z kilku typów.

Na tej stronie

Przykład

#
TypeScript
function formatId(id: string | number): string {
  if (typeof id === 'number') {
    return `#${id.toString().padStart(4, '0')}`
  }
  return id.toUpperCase()
}

console.log(formatId(42))
console.log(formatId('cw-html'))
Wynik
#0042
CW-HTML

Definicja i zastosowanie

#

Unia łączy typy pionową kreską: string | number oznacza wartość, która jest napisem albo liczbą. To jeden z najczęściej używanych mechanizmów TypeScriptu, bo dane w prawdziwych programach często przyjmują kilka postaci.

Na wartości typu unii możesz od razu używać tylko tego, co jest wspólne dla wszystkich członków. Żeby skorzystać z metod konkretnego typu, trzeba go najpierw zawęzić, na przykład warunkiem z typeof.

Unie literałów ("easy" | "medium" | "hard") to prosty i lekki sposób na listę dozwolonych wartości, często wygodniejszy niż enum.

Składnia

#
Składnia
type Nazwa = TypA | TypB | TypC

Więcej przykładów

#
Tylko wspólne metody bez zawężenia
TypeScript
function length(value: string | number) {
  return value.length
}
// Błąd: Property 'length' does not exist on type 'string | number'.

Dobre praktyki

#
  • Gdy członkami unii są obiekty, dodaj im wspólne pole z literałem (np. kind). Powstanie unia rozróżnialna, łatwa do zawężania.
  • Tablica elementów różnych typów to (string | number)[], a nie string | number[].

Powiązane hasła

#

Widzisz błąd albo brakuje przykładu? Napisz do nas.