Puede utilizar en tsx
lugar de ts
con muy poca diferencia. tsx
obviamente permite el uso de jsx
etiquetas dentro de mecanografiado, pero esto introduce algunas ambigüedades de análisis que hacen que tsx sea ligeramente diferente. En mi experiencia, estas diferencias no son muy grandes:
Las afirmaciones de tipo con <>
no funcionan, ya que ese es el marcador de una etiqueta jsx.
TypeScript tiene dos sintaxis para las afirmaciones de tipo. Ambos hacen exactamente lo mismo, pero uno se puede usar en tsx y el otro no:
let a: any;
let s = a as string // ok in tsx and ts
let s2 = <string>a // only valid in ts
También lo usaría en as
lugar de <>
en ts
archivos para mayor coherencia. as
se introdujo en Typecript porque <>
no se podía usar entsx
Las funciones de flecha genéricas sin restricción no se analizan correctamente
La función de la flecha de abajo está bien en ts
pero un error en el tsx
que <T>
se interpreta como el inicio de una etiqueta entsx
const fn = <T>(a: T) => a
Puede evitar esto agregando una restricción o no usando una función de flecha:
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
Si bien puede usar tsx en lugar de ts, no lo recomendaría. Convención es algo muy poderoso, la gente asocia tsx
con jsx
y es probable que se sorprendió que no tiene ningún jsx
etiquetas, mejor desarrollador de mantener la sorpresa al mínimo.
Si bien las ambigüedades anteriores (aunque probablemente no sea una lista completa) no son grandes, probablemente jugaron un papel importante en la decisión de usar una extensión de archivo dedicada para la nueva sintaxis a fin de mantener los ts
archivos compatibles con versiones anteriores.