Zawężanie typów

Ustalanie dokładniejszego typu wartości na podstawie sprawdzeń w kodzie.

Na tej stronie

Przykład

#
TypeScript
function total(input: number | number[] | null): number {
  if (input === null) return 0
  if (Array.isArray(input)) return input.reduce((sum, n) => sum + n, 0)
  return input
}

console.log(total(null))
console.log(total(7))
console.log(total([3, 4, 5]))
Wynik
0
7
12

Definicja i zastosowanie

#

Zawężanie to mechanizm, dzięki któremu TypeScript w danym bloku kodu wie o wartości więcej niż wynika z jej deklaracji. Po warunku if (typeof value === "string") wewnątrz bloku zmienna ma typ string, nawet jeśli wcześniej była unią.

Kompilator rozumie wiele rodzajów sprawdzeń: typeof, instanceof, operator in, porównania z literałami, sprawdzenia na null i undefined, Array.isArray() i własne funkcje strażnicze.

Działa też w drugą stronę: po return w jednej gałęzi TypeScript wie, że w dalszej części funkcji ten przypadek już nie występuje.

Składnia

#
Składnia
if (typeof value === "string") {
  // value: string
}

Dobre praktyki

#
  • Wczesne return dla przypadków brzegowych (null, pusta tablica) upraszcza resztę funkcji, bo typ jest już zawężony.
  • Gdy sprawdzenie jest złożone, wydziel je do funkcji strażniczej z typem value is T.

Powiązane hasła

#

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