TypeScriptUnie i zawężanie
Zawężanie typów
Ustalanie dokładniejszego typu wartości na podstawie sprawdzeń w kodzie.
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
returndla 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
#- Strażnicy typów (value is T)Własne funkcje sprawdzające, które zawężają typ w miejscu wywołania.
- typeof (w typach)Pobiera typ zmiennej lub wartości, żeby użyć go w innym miejscu.
- instanceofZawęża typ do klasy, sprawdzając, czy obiekt został przez nią utworzony.
- Operator inZawęża typ unii obiektów, sprawdzając, czy obiekt ma daną właściwość.
- Unia (A | B)Typ, który może być jednym z kilku typów.
Widzisz błąd albo brakuje przykładu? Napisz do nas.