Czy jest jakaś różnica między potwierdzeniami typu a nowszym operatorem „as” w języku TypeScript?

143

Czy jest jakaś różnica między tym, co specyfikacja języka TypeScript nazywa asercją typu:

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

I nowszy as operator:

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

Z których oba są zwykle używane do rzutowania w czasie kompilacji?

mk.
źródło

Odpowiedzi:

168

Różnica polega na tym, że as Circledziała w plikach TSX, ale jest w <Circle>konflikcie ze składnią JSX. aszostał wprowadzony z tego powodu.

Na przykład następujący kod w .tsxpliku:

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

Spowoduje to następujący błąd:

błąd TS17002: Oczekiwano odpowiadającego tagu zamykającego JSX dla „Circle”.

Jednak as Circlebędzie działać dobrze.

Używaj as Circleod teraz. To zalecana składnia.

David Sherret
źródło
39

Ze strony Wiki : „Co nowego w TypeScript [1.6]”:

Nowe .tsxrozszerzenie pliku ias operator

TypeScript 1.6 wprowadza nowe .tsxrozszerzenie pliku. To rozszerzenie robi dwie rzeczy: włącza JSX w plikach TypeScript i sprawia, że ​​nowy asoperator jest domyślnym sposobem rzutowania (eliminując wszelkie niejednoznaczności między wyrażeniami JSX a operatorem rzutowania przedrostka TypeScript). Na przykład:

var x = <any> foo; 
// is equivalent to:
var x = foo as any;
Martin Vseticka
źródło