Você pode usar em tsxvez de tscom muito pouca diferença. tsxobviamente permite o uso de jsxtags dentro do typescript, mas isso introduz algumas ambigüidades de análise que tornam o tsx ligeiramente diferente. Na minha experiência, essas diferenças não são muito grandes:
As afirmações de tipo com <>não funcionam, pois esse é o marcador para uma tag jsx.
O typescript tem duas sintaxes para asserções de tipo. Ambos fazem exatamente a mesma coisa, mas um é utilizável em tsx e o outro não é:
let a: any;
let s = a as string // ok in tsx and ts
let s2 = <string>a // only valid in ts
Eu usaria em asvez de <>em tsarquivos também para consistência. asfoi realmente introduzido no Typescript porque <>não era utilizável emtsx
As funções genéricas das setas sem restrições não são analisadas corretamente
A função de seta abaixo é ok em tsmas um erro em tsxcomo <T>é interpretado como o início de uma tag emtsx
const fn = <T>(a: T) => a
Você pode contornar isso adicionando uma restrição ou não usando uma função de seta:
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
Embora você possa usar tsx em vez de ts, eu não recomendo. Convenção é uma coisa poderosa, as pessoas associam tsxcom jsxe provavelmente será surpreendido você não tem nenhum jsxtags, melhor surpresa desenvolvedor reduzir ao mínimo indispensável.
Embora as ambigüidades acima (embora provavelmente não sejam uma lista completa) não sejam grandes, elas provavelmente desempenharam um grande papel na decisão de usar uma extensão de arquivo dedicada para a nova sintaxe a fim de manter os tsarquivos compatíveis com versões anteriores.