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.
(
donde no puede aparecer una etiqueta JSX, por lo que no hay ambigüedad.Es una especie de convención para usar
x
al final cuando su JavaScript está enJSX Harmony
modo. Es decir, cuando esto es válido:Sin embargo, su extensión de archivo realmente no importa, siempre que sus preprocesadores estén al tanto de su decisión (browserify o webpack). Yo, por mi parte, uso
.js
para todo mi JavaScript, incluso cuando son React. Lo mismo se aplica para el mecanografiado,ts/tsx
.EDITAR
Ahora, recomendaría encarecidamente usar JSX para Javascript con sintaxis de React y TSX para TypeScript con React porque la mayoría de los editores / IDE usarán la extensión para habilitar o no la sintaxis de React. También se considera más expresivo.
fuente
ts
ytsx
. En TypeScript, el compilador solo habilita la sintaxis JSX en.tsx
archivos, porque la sintaxis crea cierta ambigüedad con la sintaxis de TS (como la<>
sintaxis de aserción), para resolver esto, el compilador hace diferentes suposiciones en untsx
archivo en lugar de en unts
archivo. Vea la respuesta de Tiziano Cernicova-Dragomir.La razón por la que se introdujo la extensión .jsx es que JSX es una extensión de la sintaxis JS y, por lo tanto, los archivos .jsx no contienen JavaScript válido.
TypeScript sigue la misma convención al introducir las extensiones .ts y .tsx. Una diferencia práctica es que .tsx no permite
<Type>
afirmaciones de tipo porque la sintaxis está en conflicto con las etiquetas JSX.as Type
Las aserciones se introdujeron como un reemplazo<Type>
y se consideró una opción preferida por razones de coherencia tanto en .ts como en .tsx. En caso de que el código de .ts se utilice en el archivo .tsx,<Type>
deberá corregirse .El uso de la extensión .tsx implica que un módulo está relacionado con React y usa la sintaxis JSX. En caso de que no lo haga, la extensión puede dar una impresión falsa sobre el contenido del módulo y el rol en el proyecto, este es el argumento en contra del uso de la extensión .tsx por defecto.
Por otro lado, si un archivo está relacionado con React y tiene buenas posibilidades de contener JSX en algún momento, se puede nombrar como .tsx desde el principio para evitar cambiar el nombre más adelante.
Por ejemplo, las funciones de utilidad que se usan junto con los componentes de React pueden involucrar a JSX en cualquier punto y, por lo tanto, se pueden usar con seguridad nombres .tsx, mientras que que la estructura del código Redux no debe usar componentes de React directamente, se puede usar y probar aparte de React. y puede usar nombres .ts.
fuente
Creo que con los archivos .tsx podría usar todo el código JSX (JavaScript XML). Mientras que en el archivo .ts solo puede usar mecanografiado.
fuente
.ts
Los archivos tienen una<AngleBracket>
sintaxis de aserción de tipo que entra en conflicto con la gramática JSX. Para evitar romper a un montón de personas, usamos.tsx
para JSX y agregamos lafoo as Bar
sintaxis que está permitida en ambos archivos.ts
y.tsx
.Y el otro es la sintaxis as:
Podemos usar .ts con ¡
as-syntax
pero<string>someValue
es genial!fuente