Будь-яка різниця між твердженнями типу і новішим оператором `as` в TypeScript?


143

Чи є різниця між тим, що специфікація TypeScript називає твердженням типу:

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

І новіший as оператор:

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

Обидва вони зазвичай використовуються для кастингу під час компіляції?

Відповіді:


168

Різниця полягає в тому, що as Circleпрацює у файлах TSX, але <Circle>конфліктує з синтаксисом JSX. asбуло введено з цієї причини.

Наприклад, наступний код у .tsxфайлі:

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

Це призведе до наступної помилки:

помилка TS17002: очікуваний відповідний тег закриття JSX для "Circle".

Однак as Circleбуде працювати чудово.

Використовувати as Circleз цього моменту. Це рекомендований синтаксис.


39

На сторінці Wiki : "Що нового у TypeScript [1.6]":

Нове .tsxрозширення файлу та asоператор

TypeScript 1.6 представляє нове .tsxрозширення файлу. Це розширення робить дві речі: він дозволяє JSX всередині файлів TypeScript, і робить нового asоператора за замовчуванням спосіб передачі (видалення будь-якої неоднозначності між виразами JSX та оператором лиття префікса TypeScript). Наприклад:

var x = <any> foo; 
// is equivalent to:
var x = foo as any;
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.