【问题标题】:Any difference between type assertions and the newer `as` operator in TypeScript?类型断言和 TypeScript 中较新的 `as` 运算符之间有什么区别?
【发布时间】:2016-02-03 20:08:21
【问题描述】:

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

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

还有newer as 运算符:

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

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

【问题讨论】:

    标签: casting typescript


    【解决方案1】:

    不同之处在于as Circle 在 TSX 文件中工作,但 &lt;Circle&gt; 与 JSX 语法冲突。 as 就是为此引入的。

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

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

    会导致以下错误:

    错误 TS17002: 'Circle' 需要对应的 JSX 结束标记。

    但是,as Circle 可以正常工作。

    从现在开始使用as Circle。这是recommended 语法。

    【讨论】:

      【解决方案2】:

      来自Wiki page:“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;
      

      【讨论】:

      猜你喜欢
      • 2019-08-09
      • 2023-02-18
      • 1970-01-01
      • 1970-01-01
      • 2013-12-27
      • 1970-01-01
      • 1970-01-01
      • 2015-11-07
      相关资源
      最近更新 更多