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


142

TypeScript规范称为类型断言之间有什么区别:

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

较新的 as运算符:

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

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

Answers:


167

区别在于as Circle可以在TSX文件中使用,但<Circle>与JSX语法冲突。as因此被引入。

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

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

将导致以下错误:

错误TS17002:“圆”需要相应的JSX结束标记。

但是,as Circle将正常工作。

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


39

Wiki页面:“ 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;
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.