Une différence entre les assertions de type et le plus récent opérateur `as` dans TypeScript?

143

Y a-t-il une différence entre ce que la spécification TypeScript appelle une assertion de type:

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

Et le nouvel as opérateur:

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

Les deux sont généralement utilisés pour la conversion au moment de la compilation?

mk.
la source

Réponses:

168

La différence est que cela as Circlefonctionne dans les fichiers TSX, mais entre en <Circle>conflit avec la syntaxe JSX. asa été introduit pour cette raison.

Par exemple, le code suivant dans un .tsxfichier:

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

Entraînera l'erreur suivante:

erreur TS17002: balise de fermeture JSX correspondante attendue pour 'Circle'.

Cependant, as Circlecela fonctionnera très bien.

Utilisez à as Circlepartir de maintenant. C'est la syntaxe recommandée .

David Sherret
la source
39

Depuis la page Wiki : "Quoi de neuf dans TypeScript [1.6]":

Nouvelle .tsxextension de fichier et asopérateur

TypeScript 1.6 introduit une nouvelle .tsxextension de fichier. Cette extension fait deux choses: elle active JSX à l'intérieur des fichiers TypeScript, et elle fait du nouvel asopérateur le moyen par défaut de transtyper (supprimant toute ambiguïté entre les expressions JSX et l'opérateur de conversion de préfixe TypeScript). Par exemple:

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