casting - Existuje nejaký rozdiel medzi typovými tvrdeniami a novším operátorom `as` v TypeScripte?


Existuje nejaký rozdiel medzi tým, čo špecifikácia TypeScript nazýva typovým tvrdením:

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

A novší operátor as:

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

Oba sa zvyčajne používajú na pretypovanie počas kompilácie?

Odpoveď č. 1

Rozdiel je v tom, že as Circle funguje v súboroch TSX, ale <Circle> je v konflikte so syntaxi JSX. as bolo zavedené z tohto dôvodu.

Napríklad nasledujúci kód v súbore .tsx:

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

Bude mať za následok nasledujúcu chybu:

chyba TS17002: Očakávaný zodpovedajúci uzatvárací JSX tag pre 'Circle'.

Avšak, as Circle bude fungovať úplne v poriadku.

Odteraz používajte as Circle. Je to odporúčaná syntax.

Odpoveď č. 2

Z Wiki stránky: „Čo je nové v TypeScripte [1.6]“:

Nová prípona súboru .tsx a operátor as

TypeScript 1.6 zavádza novú príponu súboru .tsx. Táto prípona robí dve veci: umožňuje používanie JSX v súboroch TypeScript a robí nový operátor as predvoleným spôsobom pretypovania (odstraňuje akúkoľvek nejednoznačnosť medzi JSX výrazmi a predponou operátora pretypovania v TypeScript). Napríklad:

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

Súvisiace články