我刚开始用TypeScript做一个React项目,然后问自己我应该如何处理常规类文件?我应该使用.ts或.tsx文件,然后我找不到任何理由不一直使用.tsx文件,即使它不是React项目
是否有任何原因或特定情况下我们不应该使用.tsx文件?如果没有,为什么TypeScript团队要添加全新的扩展
您可以使用tsx代替ts,差别很小tsx显然允许在TypeScript中使用jsx标记,但这引入了一些语法歧义,使tsx略有不同。根据我的经验,这些差异不是很大:
使用键入断言<&燃气轮机不工作,因为这是jsx标记的标记。
TypeScript有两个类型断言语法。它们的功能完全相同,但一个在tsx中可用,另一个则不可用:
让a:any;
让s=a作为字符串//在tsx和ts中为ok
设s2=<;字符串>;a//仅在ts中有效
我会使用作为而不是<&燃气轮机</在ts文件中添加code>以确保一致性作为实际上是在TypeScript中引入的,因为<&燃气轮机在tsx中不可用
未正确解析无约束的通用箭头函数
下面的箭头功能在ts中正常,但在tsx中出现错误,如<;T>在tsx中被解释为标记的开始:
常量fn=<;T>;(a:T)=>;A.
您可以通过添加约束或不使用箭头函数来解决此问题:
常量fn=<;T扩展任何>;(a:T)=>;A.
常数fn=<;T、 >;(a:T)=>;a//这也行,但在我看来很奇怪
常数fn=函数<;T>;(a:T){返回a;}
注意
虽然您可以使用tsx而不是ts,但我建议您不要使用它。约定是一个强大的东西,人们将tsx与jsx联系在一起,并且可能会惊讶于您没有任何jsx标记,最好将开发人员的惊喜降到最低
虽然上面的含糊不清之处(虽然可能不是一个完整的列表)不大,但它们可能在决定为新语法使用专用文件扩展名以保持ts文件向后兼容的过程中起了很大作用