在typescript中始终使用.tsx而不是.ts有什么缺点吗?

我刚开始用TypeScript做一个React项目,然后问自己我应该如何处理常规类文件?我应该使用.ts.tsx文件,然后我找不到任何理由不一直使用.tsx文件,即使它不是React项目

是否有任何原因或特定情况下我们不应该使用.tsx文件?如果没有,为什么TypeScript团队要添加全新的扩展

您可以使用tsx代替ts,差别很小tsx显然允许在TypeScript中使用jsx标记,但这引入了一些语法歧义,使tsx略有不同。根据我的经验,这些差异不是很大:

使用键入断言&lt&燃气轮机不工作,因为这是jsx标记的标记。

TypeScript有两个类型断言语法。它们的功能完全相同,但一个在tsx中可用,另一个则不可用:

让a:any;
让s=a作为字符串//在tsx和ts中为ok
设s2=<字符串>a//仅在ts中有效

我会使用作为而不是&lt&燃气轮机</在ts文件中添加code>以确保一致性作为实际上是在TypeScript中引入的,因为&lt&燃气轮机在tsx中不可用

未正确解析无约束的通用箭头函数

下面的箭头功能在ts中正常,但在tsx中出现错误,如&lt;T&gt在tsx中被解释为标记的开始:

常量fn=&lt;T&gt;(a:T)=&gt;A.

您可以通过添加约束或不使用箭头函数来解决此问题:

常量fn=&lt;T扩展任何&gt;(a:T)=&gt;A.
常数fn=&lt;T、 &gt;(a:T)=&gt;a//这也行,但在我看来很奇怪
常数fn=函数&lt;T&gt;(a:T){返回a;}

注意

虽然您可以使用tsx而不是ts,但我建议您不要使用它。约定是一个强大的东西,人们将tsxjsx联系在一起,并且可能会惊讶于您没有任何jsx标记,最好将开发人员的惊喜降到最低

虽然上面的含糊不清之处(虽然可能不是一个完整的列表)不大,但它们可能在决定为新语法使用专用文件扩展名以保持ts文件向后兼容的过程中起了很大作用

发表评论