Gibt es einen Unterschied zwischen Typzusicherungen und dem neueren "as" -Operator in TypeScript?

142

Gibt es einen Unterschied zwischen dem, was die TypeScript-Spezifikation als Typzusicherung bezeichnet:

var circle = <Circle> createShape("circle");

Und der neuere as Betreiber:

var circle = createShape("circle") as Circle;

Beide werden normalerweise für das Casting zur Kompilierungszeit verwendet?

mk.
quelle

Antworten:

166

Der Unterschied besteht darin, dass dies as Circlein TSX-Dateien funktioniert, jedoch <Circle>mit der JSX-Syntax in Konflikt steht. aswurde aus diesem Grund eingeführt.

Zum Beispiel der folgende Code in einer .tsxDatei:

var circle = <Circle> createShape("circle");

Wird zu folgendem Fehler führen:

Fehler TS17002: Erwartetes entsprechendes JSX-Abschluss-Tag für 'Circle'.

Funktioniert jedoch as Circleeinwandfrei.

Verwenden Sie as Circlevon nun an. Dies ist die empfohlene Syntax.

David Sherret
quelle
39

Von der Wiki-Seite : "Was ist neu in TypeScript [1.6]":

Neue .tsxDateierweiterung und neuer asOperator

TypeScript 1.6 führt eine neue .tsxDateierweiterung ein. Diese Erweiterung bewirkt zwei Dinge: Sie aktiviert JSX innerhalb von TypeScript-Dateien und macht den neuen asOperator zur Standardmethode für das Umwandeln (Entfernen von Mehrdeutigkeiten zwischen JSX-Ausdrücken und dem Umsetzungsoperator für das TypeScript-Präfix). Beispielsweise:

var x = <any> foo; 
// is equivalent to:
var x = foo as any;
Martin Vseticka
quelle