Puoi usare tsx
invece che ts
con pochissima differenza. tsx
ovviamente consente l'uso di jsx
tag all'interno del dattiloscritto, ma questo introduce alcune ambiguità di analisi che rendono tsx leggermente diverso. Nella mia esperienza queste differenze non sono molto grandi:
Le asserzioni di tipo con <>
non funzionano poiché questo è il marcatore per un tag jsx.
Typescript ha due sintassi per le asserzioni di tipo. Entrambi fanno la stessa identica cosa ma uno è utilizzabile in tsx, l'altro no:
let a: any;
let s = a as string // ok in tsx and ts
let s2 = <string>a // only valid in ts
Vorrei usare as
al posto di <>
in ts
file e per la coerenza. as
è stato effettivamente introdotto in Typescript perché <>
non era utilizzabile intsx
Le funzioni freccia generiche senza vincoli non vengono analizzate correttamente
La funzione freccia sotto va bene in ts
ma un errore in tsx
come <T>
viene interpretato come l'inizio di un tag intsx
const fn = <T>(a: T) => a
Puoi aggirare questo problema aggiungendo un vincolo o non usando una funzione freccia:
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
Anche se puoi usare tsx invece di ts, ti consiglio di non farlo. Convention è una cosa potente, la gente associa tsx
con jsx
e probabilmente saranno sorpresi non si dispone di nessun jsx
tag, migliore sorpresa mastio sviluppatore al minimo.
Sebbene le ambiguità di cui sopra (sebbene probabilmente non un elenco completo) non siano grandi, probabilmente hanno giocato un ruolo importante nella decisione di utilizzare un'estensione di file dedicata per la nuova sintassi al fine di mantenere i ts
file compatibili con le versioni precedenti.