TypeScriptUnie i zawężanie
Asercja typu (as)
Wskazanie kompilatorowi typu wartości, gdy wiesz więcej niż on.
Przykład
#TypeScript
type Lesson = { title: string; minutes: number }
const raw = '{"title":"Grid","minutes":16}'
const lesson = JSON.parse(raw) as Lesson
console.log(lesson.title.toUpperCase(), lesson.minutes)Wynik
GRID 16
Definicja i zastosowanie
#Asercja value as Typ mówi kompilatorowi: „zaufaj mi, to jest Typ”. Nie zmienia wartości ani niczego nie sprawdza w działającym programie. Wpływa wyłącznie na typ w czasie kompilacji.
Uzasadnione przypadki to na przykład element DOM, o którym wiesz, że jest polem formularza (as HTMLInputElement), albo dane, które sprawdziła już wcześniej inna warstwa aplikacji.
Nadużywana asercja to cicha furtka dla błędów. Jeśli wartość w rzeczywistości ma inny kształt, program wyłoży się dopiero w działaniu. Tam, gdzie się da, zamiast as używaj zawężania i strażników typów.
Składnia
#Składnia
const wartosc = wyrazenie as TypWięcej przykładów
#TypeScript
const broken = JSON.parse('{"name":"Grid"}') as Lesson
try {
console.log(broken.title.toUpperCase())
} catch (error) {
console.log('Błąd w działaniu, mimo że kompilator nie protestował')
}Wynik
Błąd w działaniu, mimo że kompilator nie protestował
Dobre praktyki
#- Traktuj
asjako ostateczność. Przy danych z zewnątrz lepiej sprawdzić ich kształt strażnikiem typu. - Podwójna asercja
as unknown as Tprawie zawsze oznacza, że coś jest nie tak z typami.
Powiązane hasła
#- satisfiesSprawdza, czy wartość pasuje do typu, nie zmieniając typu wywnioskowanego.
- Strażnicy typów (value is T)Własne funkcje sprawdzające, które zawężają typ w miejscu wywołania.
- Asercja non-null (!)Wykrzyknik po wyrażeniu usuwa z typu null i undefined bez sprawdzania.
- unknownBezpieczny odpowiednik any: wartość nieznanego typu, której trzeba najpierw sprawdzić.
Widzisz błąd albo brakuje przykładu? Napisz do nas.