【问题标题】:Why there are 2 different syntax of casting in typescript?为什么打字稿中有两种不同的铸造语法?
【发布时间】:2016-12-20 03:19:51
【问题描述】:

据我所知,Typescript 有两种语法类型。

  1. 只需使用<> 进行投射

    const a = <A>b;
    
  2. 使用as 语句进行强制转换

    const a = b as A;
    

我猜生成的代码 1 或 2 是完全一样的。 而且,当我开始使用 Typescript 时,没有这样的语法可以使用 as 语句。我猜as 是打字稿中的新语法。

但是,应该有一些理由来制定新的语法。为什么他们需要这些语法?如果只有 1 种强制转换语法,会不会有什么不方便的地方?

【问题讨论】:

  • 这不叫(也不应该叫)“铸造”。正确的术语是“类型断言”。

标签: typescript casting type-assertion


【解决方案1】:

here所述

最初添加的语法是&lt;foo&gt;
...

但是有一个 在中使用&lt;foo&gt; 样式断言时语言语法中的歧义 JSX:

var foo = <string>bar;
</string>

因此现在建议您只使用as foo 一致性。

【讨论】:

  • 使用泛型语法似乎会产生几乎相同的歧义,不是吗?
  • 是的,因此您必须采取一些变通方法使其像&lt;T1 extends {}&gt;(foo: T1) =&gt; { return T1; } 一样工作,而不仅仅是&lt;T1&gt;(foo: T1) ...。但是在演员阵容中添加这样的“冗余”东西是不可能的,因此额外的操作员
  • 我明白了。谢谢你好心回答我的问题。
  • 感谢@DAXaholic 我不知道如何在 TSX 中执行通用箭头函数。添加到提示basarat.gitbooks.io/typescript/content/docs/tips/…?
猜你喜欢
  • 2018-11-17
  • 2022-11-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-07-26
  • 1970-01-01
  • 2017-03-11
  • 2018-12-11
相关资源
最近更新 更多