Vous pouvez utiliser tsx
au lieu de ts
avec très peu de différence. tsx
permet évidemment l'utilisation de jsx
balises à 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 as
au lieu de <>
dans des ts
fichiers pour la cohérence. as
a é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 ts
mais une erreur dans tsx
as <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 tsx
avec jsx
et 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 ts
fichiers rétrocompatibles.