Qualche differenza tra le asserzioni di tipo e il più recente operatore `as` in TypeScript?


143

C'è qualche differenza tra ciò che la specifica TypeScript chiama un'asserzione di tipo:

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

E il nuovo as operatore:

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

Entrambi sono generalmente utilizzati per il cast in fase di compilazione?

Risposte:


168

La differenza è che as Circlefunziona nei file TSX, ma è in <Circle>conflitto con la sintassi JSX. asè stato introdotto per questo motivo.

Ad esempio, il seguente codice in un .tsxfile:

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

Si verificherà il seguente errore:

errore TS17002: tag di chiusura JSX corrispondente atteso per "Cerchio".

Tuttavia, as Circlefunzionerà bene.

Utilizzare as Circleda ora in poi. È la sintassi consigliata .


39

Dalla pagina Wiki : "Novità di TypeScript [1.6]":

Nuova .tsxestensione e asoperatore del file

TypeScript 1.6 introduce una nuova .tsxestensione di file. Questa estensione fa due cose: abilita JSX all'interno dei file TypeScript e rende il nuovo asoperatore il modo predefinito per eseguire il cast (rimuovendo qualsiasi ambiguità tra le espressioni JSX e l'operatore cast del prefisso TypeScript). Per esempio:

var x = <any> foo; 
// is equivalent to:
var x = foo as any;
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.