Читать книгу Angular - Manfred Steyer - Страница 40
Type Assertion (Type Casting)
ОглавлениеObwohl die im letzten Abschnitt verwendete Variable person1 auf einen Passagier verweist, erlaubt sie keinen Zugriff auf Eigenschaften, die für Passagiere spezifisch sind, etwa auf den passengerStatus:
const person1: Person = new Passenger();
person1.firstName = 'Max';
person1.lastName = 'Muster';
// let status = person1.passengerStatus; // FEHLER !!
Der Grund dafür ist einfach: Die Variable person1 ist mit Person typisiert. Das bedeutet, dass zur Laufzeit alles, was mit dem Typ Person kompatibel ist, zugewiesen werden darf. Das schließt sowohl Passagiere als auch Piloten ein. Auch wenn in diesem einfachen Beispiel auf den ersten Blick ersichtlich ist, dass person1 nur einen Passagier beherbergt, kann der Compiler das im allgemeinen Fall nicht sicherstellen. Deswegen orientiert er sich bei den erlaubten Zugriffen am Typ der Variablen, also an Person. Und eine solche hat eben keinen passengerStatus.
Um dieses Problem zu umgehen, muss der Entwickler Verantwortung übernehmen und den Compiler explizit darauf hinweisen, dass es sich um einen Passagier handelt. Hierzu ist in den meisten Sprachen eine Typumwandlung erforderlich. In TypeScript ist hierbei von einer Type Assertion die Rede:
const person1AsPassenger = person1 as Passenger; // Type Assertion
// let person1AsPassenger = <Passenger>person1;
// alternative Schreibweise
let status = person1AsPassenger.passengerStatus;
Das TypeScript-Team nimmt hier bewusst von der in anderen Sprachen üblichen Bezeichnung Type Cast Abstand, zumal ein Type Cast häufig auch bestimmte Prüfungen zur Laufzeit involviert. TypeScript hat jedoch keinen Einfluss auf die Ausführung des generierten JavaScript-Codes. Deswegen erscheint auch der Begriff Type Assertion treffender, zumal durch ihn ausgedrückt wird, dass man davon ausgeht, zur Laufzeit den gewünschten Typ vorzufinden. |