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
.tsxa operátorasTypeScript 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átoraspredvolený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;
