我刚开始用TypeScript做一个React项目,并问自己应该如何处理常规的类文件?我应该使用.ts
或.tsx
文件,然后我找不到任何理由不使用.tsx
文件,即使它不是一个React项目!
有没有什么原因或特殊情况让我们不能使用.tsx
文件?如果没有,为什么TypeScript团队要添加全新的扩展?
发布于 2019-02-10 15:23:05
您可以使用tsx
而不是ts
,差别很小。tsx
显然允许在TypeScript中使用jsx
标记,但这引入了一些解析歧义,这使得tsx略有不同。根据我的经验,这些差异并不是很大:
带有jsx <>
的类型断言不起作用,因为它是标记的标记。
TypeScript有两种用于类型断言的语法。它们都做了完全相同的事情,但是一个在tsx中是可用的,另一个是不可用的:
let a: any;
let s = a as string // ok in tsx and ts
let s2 = <string>a // only valid in ts
为了保持一致性,我也会在ts
文件中使用as
而不是<>
。as
实际上是在TypeScript中引入的,因为<>
在tsx
中不可用。
不能正确解析没有约束的泛型箭头函数
下面的箭头函数在ts
中是正常的,但在tsx
中出现错误,因为<T>
在tsx
中被解释为标签的开始
const fn = <T>(a: T) => a
您可以通过添加约束或不使用箭头函数来解决此问题:
const fn = <T extends any>(a: T) => a
const fn = <T,>(a: T) => a // this also works but looks weird IMO
const fn = function<T>(a: T) { return a;}
便笺
虽然您可以使用tsx
而不是ts
,但我建议您不要使用它。约定是一个强大的东西,人们将tsx
与jsx
联系在一起,并可能会对你没有任何jsx
标签感到惊讶,最好让开发人员的惊讶降到最低。
虽然上面的歧义不大(尽管可能不是完整的列表),但它们可能在决定为新语法使用专用文件扩展名以保持ts
文件向后兼容方面发挥了很大作用。
https://stackoverflow.com/questions/34224007
复制相似问题