Любая разница между утверждениями типа и новым оператором `as` в TypeScript?
Есть ли разница между тем, что спецификация TypeScript вызывает утверждение типа:
var circle = <Circle> createShape("circle");
И оператор new as
:
var circle = createShape("circle") as Circle;
Оба из них обычно используются для кастинга во время компиляции?
Ответы
Ответ 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;