类型断言与TypeScript中较新的`as`运算符之间有什么区别?

时间:2015-11-03 15:35:16

标签: casting typescript

TypeScript规范调用类型断言之间有什么区别:

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

newer as运算符:

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

这两者通常用于编译时转换吗?

2 个答案:

答案 0 :(得分:112)

不同之处在于as Circle在TSX文件中有效,但<Circle>与JSX语法冲突。出于这个原因引入了as

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

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

将导致以下错误:

  

错误TS17002:'Circle'的预期相应JSX结束标记。

但是,as Circle可以正常使用。

从现在开始使用as Circle。这是https://developers.google.com/protocol-buffers/docs/reference/python/google.protobuf.reflection-module语法。

答案 1 :(得分:25)

来自Wiki page:&#34; TypeScript [1.6]&#34;中的新功能:

  

新的 void method2() { try { System.out.println("1"); System.exit(0); } finally { System.out.println("3"); } } 文件扩展名和.tsx运算符

     

TypeScript 1.6引入了新的as文件扩展名。这个扩展   做两件事:它在TypeScript文件中启用JSX,以及它   使新的.tsx运算符成为转换的默认方式(删除任何运算符)   JSX表达式和TypeScript前缀强制转换之间的歧义   运营商)。例如:

as