Frage 6
Was ist die beste Implementation des untenstehenden Interface JavaScript interface Named { name: string; content: any; }
Alle Implementation setzen die Bedingungen von TypeScript um, ohne einen Error anzuzeigen.
Lösung A deklariert eine Konstante mit dem Typ Named und erhält einen Wert, der auf das Interface Named zuweisbar ist.
Lösung B und C erzeugen eine Konstante ohne Typinformationen. Diese erhält dann einen Wert. Anschließend wird dem Compiler erzählt, der Wert hat das Interface Named.
C ist eine neuere Schreibweise für B. TypeScript hat das as keyword implementiert, da die alte Syntax bei tsx (TypeScript XML) Probleme verursacht hat.
Lösung B und C zeigen in verschiedenen Situationen Schwächen. Beispiel Refactoring. Ein definierter Type wirft zur Compile-Zeit (also in deiner IDE) einen Error, wenn der Value nicht das Interface erfüllt. Wird dem Compiler hingegen ein Typ „aufgezwungen“ vertraut er dem Anwender und überprüft den Typen nicht. Erst zur Laufzeit kann es zu Probleme führen, wenn auf fehlende Werte zugegriffen wird.
A
const somebody: Named = {
content: {}
};
// Error: Missing property "name"
B
const somebody =
// no error
C
const somebody = {
content: {}
} as Named;
// no error
Referenzen:
Type Assertions