我刚刚开始使用打字稿进行反应项目,并问自己我应该如何处理常规类文件?我应该使用.ts或.tsx文件,然后我找不到任何理由不使用.tsx文件,即使它不是反应项目!是否有任何理由或具体情况我们不应该使用.tsx文件?如果没有为什么打字稿团队添加全新的扩展?
你可以使用tsx
而不是ts
差别很小.tsx
显然允许jsx
在typescript中使用标签,但这会引入一些解析歧义,使tsx略有不同.根据我的经验,这些差异不是很大:
类型断言<>
不起作用,因为它是jsx标记的标记.
Typescript有两种类型断言的语法.他们都做了完全相同的事情,但一个在tsx中可用,另一个不是:
let a: any; let s = a as string // ok in tsx and ts let s2 =a // only valid in ts
我会使用as
而不是<>
ts文件来保持一致性.ts
实际上是在Typescript中引入的,因为as
它不可用<>
没有约束的通用箭头函数未正确解析
下面的箭头功能正常,tsx
但是错误中的ts
as tsx
被解释为标签的开头
const fn =(a: T) => a
您可以通过添加约束或不使用箭头函数来解决这个问题:
const fn =(a: T) => a const fn = (a: T) => a // this also works but looks weird IMO const fn = function (a: T) { return a;}
注意
虽然您可以使用tsx而不是ts,但我建议不要使用它.公约是一个强大的东西,人们联想tsx
到tsx
并且可能会惊讶你没有任何jsx
标签,最好让开发人员惊喜到最低限度.
虽然上面的含糊不清(虽然可能不是一个完整的列表)并不大,但它们可能在决定为新语法使用专用文件扩展名以保持jsx
文件向后兼容方面发挥了重要作用.
x
当JavaScript处于JSX Harmony
模式时,最终会使用它.也就是说,当它有效时:
doSomething(My div);
但是,只要您的预处理器知道您的决定(browserify或webpack),您的文件扩展名就无关紧要了.就我而言,我使用.js
我的所有JavaScript,即使它们是React.这同样适用于TypeScript ts/tsx
.