TypeScriptUnie i zawężanie
instanceof
Zawęża typ do klasy, sprawdzając, czy obiekt został przez nią utworzony.
Przykład
#TypeScript
class ValidationError extends Error {
constructor(public field: string, message: string) {
super(message)
this.name = 'ValidationError'
}
}
function describeError(error: unknown): string {
if (error instanceof ValidationError) return `Pole ${error.field}: ${error.message}`
if (error instanceof Error) return `Błąd: ${error.message}`
return 'Nieznany błąd'
}
console.log(describeError(new ValidationError('email', 'niepoprawny adres')))
console.log(describeError(new Error('brak sieci')))
console.log(describeError('oops'))Wynik
Pole email: niepoprawny adres Błąd: brak sieci Nieznany błąd
Definicja i zastosowanie
#Operator instanceof sprawdza w działającym programie, czy obiekt pochodzi od danej klasy (ma ją w łańcuchu prototypów). TypeScript wykorzystuje to sprawdzenie do zawężenia typu w bloku if.
Najczęściej przydaje się przy błędach (error instanceof Error), datach (value instanceof Date) i własnych klasach, na przykład różnych rodzajach wyjątków.
Działa tylko z klasami i konstruktorami, które istnieją po kompilacji. Nie da się sprawdzić instanceof dla interfejsu, bo interfejsy znikają w JavaScripcie.
Składnia
#Składnia
if (value instanceof Klasa) {
// value: Klasa
}Dobre praktyki
#- W
catchbłąd ma typunknown. Sprawdźerror instanceof Error, zanim odczytaszmessage. - Do sprawdzania kształtu zwykłych obiektów (np. z JSON)
instanceofnie zadziała. Użyj operatorainalbo strażnika typu.
Powiązane hasła
#- Zawężanie typówUstalanie dokładniejszego typu wartości na podstawie sprawdzeń w kodzie.
- Strażnicy typów (value is T)Własne funkcje sprawdzające, które zawężają typ w miejscu wywołania.
- Operator inZawęża typ unii obiektów, sprawdzając, czy obiekt ma daną właściwość.
- unknownBezpieczny odpowiednik any: wartość nieznanego typu, której trzeba najpierw sprawdzić.
Widzisz błąd albo brakuje przykładu? Napisz do nas.