Puede utilizar en tsxlugar de tscon muy poca diferencia. tsxobviamente permite el uso de jsxetiquetas dentro de mecanografiado, pero esto introduce algunas ambigüedades de análisis que hacen que tsx sea ligeramente diferente. En mi experiencia, estas diferencias no son muy grandes:
Las afirmaciones de tipo con <>no funcionan, ya que ese es el marcador de una etiqueta jsx.
TypeScript tiene dos sintaxis para las afirmaciones de tipo. Ambos hacen exactamente lo mismo, pero uno se puede usar en tsx y el otro no:
let a: any;
let s = a as string // ok in tsx and ts
let s2 = <string>a // only valid in ts
También lo usaría en aslugar de <>en tsarchivos para mayor coherencia. asse introdujo en Typecript porque <>no se podía usar entsx
Las funciones de flecha genéricas sin restricción no se analizan correctamente
La función de la flecha de abajo está bien en tspero un error en el tsxque <T>se interpreta como el inicio de una etiqueta entsx
const fn = <T>(a: T) => a
Puede evitar esto agregando una restricción o no usando una función de flecha:
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;}
Nota
Si bien puede usar tsx en lugar de ts, no lo recomendaría. Convención es algo muy poderoso, la gente asocia tsxcon jsxy es probable que se sorprendió que no tiene ningún jsxetiquetas, mejor desarrollador de mantener la sorpresa al mínimo.
Si bien las ambigüedades anteriores (aunque probablemente no sea una lista completa) no son grandes, probablemente jugaron un papel importante en la decisión de usar una extensión de archivo dedicada para la nueva sintaxis a fin de mantener los tsarchivos compatibles con versiones anteriores.