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

mk.*_*mk. 104 casting typescript

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

var circle = <Circle> createShape("circle");
Run Code Online (Sandbox Code Playgroud)

较新的 as运营商:

var circle = createShape("circle") as Circle;
Run Code Online (Sandbox Code Playgroud)

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

Dav*_*ret 130

不同之处在于它as Circle适用于TSX文件,但<Circle>与JSX语法冲突.as因此而被引入.

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

var circle = <Circle> createShape("circle");
Run Code Online (Sandbox Code Playgroud)

将导致以下错误:

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

但是,as Circle工作得很好.

as Circle从现在开始使用.这是推荐的语法.


Mar*_*cka 29

来自Wiki页面:"TypeScript [1.6]中的新功能":

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

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

var x = <any> foo; 
// is equivalent to:
var x = foo as any;
Run Code Online (Sandbox Code Playgroud)

  • 这两个有什么不同吗?```var x = foo as any; var x: 任意 = foo;``` (4认同)
  • @yusunglee更好地回答你的问题:/sf/ask/4845428241/ Between-as-type-operator-and-classical-typing-in-typescr?noredirect=1#评论122344292_69220403 (2认同)