Подтвердить что ты не робот

Любая разница между утверждениями типа и новым оператором `as` в TypeScript?

Есть ли разница между тем, что спецификация TypeScript вызывает утверждение типа:

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

И оператор new as:

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

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

4b9b3361

Ответ 1

Разница в том, что as Circle работает в файлах TSX, но <Circle> конфликтует с синтаксисом JSX. По этой причине был введен as.

Например, следующий код в файле .tsx:

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

Приведёт к следующей ошибке:

ошибка TS17002: ожидаемый соответствующий тег закрытия JSX для "круга".

Однако as Circle будет работать нормально.

Используйте as Circle с этого момента. Это рекомендуемый синтаксис.

Ответ 2

Из Страница 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;