Vous pouvez utiliser tsxau lieu de tsavec très peu de différence. tsxpermet évidemment l'utilisation de jsxbalises à l'intérieur du typographie, mais cela introduit des ambiguïtés d'analyse qui rendent tsx légèrement différent. D'après mon expérience, ces différences ne sont pas très grandes:
Les assertions de type avec <>ne fonctionnent pas car c'est le marqueur d'une balise jsx.
Typescript a deux syntaxes pour les assertions de type. Ils font tous les deux exactement la même chose mais l'un est utilisable dans tsx, l'autre ne l'est pas:
let a: any;
let s = a as string // ok in tsx and ts
let s2 = <string>a // only valid in ts
J'utiliserais également asau lieu de <>dans des tsfichiers pour la cohérence. asa été introduit dans Typescript car il <>n'était pas utilisable danstsx
Les fonctions fléchées génériques sans contrainte ne sont pas analysées correctement
La fonction de flèche ci-dessous est correcte tsmais une erreur dans tsxas <T>est interprétée comme le début d'une balise danstsx
const fn = <T>(a: T) => a
Vous pouvez contourner ce problème en ajoutant une contrainte ou en n'utilisant pas de fonction de flèche:
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;}
Remarque
Bien que vous puissiez utiliser tsx au lieu de ts, je vous le déconseille. Convention est une chose puissante, les gens associent tsxavec jsxet seront probablement surpris que vous n'avez pas des jsxétiquettes, la meilleure surprise développeur de garder au minimum.
Bien que les ambiguïtés ci-dessus (bien que probablement pas une liste complète) ne soient pas grandes, elles ont probablement joué un grand rôle dans la décision d'utiliser une extension de fichier dédiée pour la nouvelle syntaxe afin de garder les tsfichiers rétrocompatibles.