Możesz użyć tsxzamiast tsz bardzo małą różnicą. tsxoczywiście pozwala na użycie jsxznaczników wewnątrz maszynopisu, ale wprowadza to pewne niejednoznaczności podczas analizowania, które powodują, że tsx nieco się różni. Z mojego doświadczenia wynika, że różnice te nie są zbyt duże:
<>Asercje typu z nie działają, ponieważ jest to znacznik dla tagu jsx.
Typescript ma dwie składnie dla asercji typu. Obaj robią dokładnie to samo, ale jeden jest użyteczny w tsx, a drugi nie:
let a: any;
let s = a as string // ok in tsx and ts
let s2 = <string>a // only valid in ts
Używałbym aszamiast <>w tsplikach, aby zachować spójność. aszostał faktycznie wprowadzony w Typescript, ponieważ <>nie był używany wtsx
Ogólne funkcje strzałkowe bez ograniczeń nie są poprawnie analizowane
Funkcja strzałka poniżej jest OK ts, ale błąd w tsxjak <T>jest interpretowana jako początek znacznika wtsx
const fn = <T>(a: T) => a
Możesz to obejść, dodając ograniczenie lub nie używając funkcji strzałkowej:
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;}
Uwaga
Chociaż możesz użyć tsx zamiast ts, odradzałbym to. Konwencja jest potężną rzeczą, ludzie kojarzą tsxz jsxi będzie prawdopodobnie zaskoczony, że nie mają żadnych jsxznaczników, najlepsze keep programisty niespodziankę do minimum.
Chociaż powyższe niejasności (chociaż prawdopodobnie nie jest to pełna lista) nie są duże, prawdopodobnie odegrały dużą rolę w decyzji o użyciu dedykowanego rozszerzenia pliku dla nowej składni w celu zachowania tskompatybilności wstecznej plików.