类型断言和 TypeScript 中较新的‘ as’运算符之间有什么区别吗?

TypeScript 规范所称的类型断言有什么区别吗:

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

更新 as接线员:

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

两者都通常用于编译时强制转换?

58010 次浏览

区别在于,as Circle在 TSX 文件中工作,但是 <Circle>与 JSX 语法冲突。引入 as就是为了这个原因。

例如,.tsx文件中的以下代码:

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

将导致以下错误:

错误 TS17002: “ Circle”应该有相应的 JSX 结束标记。

然而,as Circle将工作得很好。

从现在开始使用 as Circle。它是 建议语法。

来自 维基页面: “ What’s new in TypeScript [1.6]”:

新的 .tsx文件扩展名和 as操作符

TypeScript 1.6引入了一个新的 .tsx文件扩展名 完成两件事: 它在 TypeScript 文件中启用 JSX,以及 使新的 as操作符成为强制转换的默认方法(删除任何 JSX 表达式和 TypeScript 前缀强制转换之间的模糊性 例如:

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