instanceof

Zawęża typ do klasy, sprawdzając, czy obiekt został przez nią utworzony.

Na tej stronie

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 catch błąd ma typ unknown. Sprawdź error instanceof Error, zanim odczytasz message.
  • Do sprawdzania kształtu zwykłych obiektów (np. z JSON) instanceof nie zadziała. Użyj operatora in albo strażnika typu.

Powiązane hasła

#

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