Вы можете использовать tsx
вместо ts
с очень небольшой разницей. tsx
очевидно, позволяет использовать jsx
теги внутри машинописного текста, но это вносит некоторую двусмысленность при синтаксическом анализе, которая делает tsx немного другим. По моему опыту, эти различия не очень большие:
Утверждения типа с <>
не работают, поскольку это маркер для тега jsx.
В Typescript есть два синтаксиса для утверждений типа. Они оба делают одно и то же, но один можно использовать в tsx, а другой нет:
let a: any;
let s = a as string // ok in tsx and ts
let s2 = <string>a // only valid in ts
Я хотел бы использовать as
вместо <>
в ts
файлах , а также для обеспечения согласованности. as
был фактически введен в Typescript, потому что <>
не мог использоваться вtsx
Стандартные стрелочные функции без ограничений анализируются неправильно
Указанная ниже стрелочная функция работает, ts
но ошибка в tsx
as <T>
интерпретируется как начало тега вtsx
const fn = <T>(a: T) => a
Вы можете обойти это, добавив ограничение или не используя стрелочную функцию:
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;}
Заметка
Хотя вы можете использовать tsx вместо ts, я бы не рекомендовал его. Конвенция является сильной вещью, люди ассоциируют tsx
с jsx
и, вероятно , будут удивлены , что вы не имеете никаких jsx
тегов, лучший разработчик Keep сюрприз к минимуму.
Хотя приведенные выше неоднозначности (хотя, вероятно, не полный список) невелики, они, вероятно, сыграли большую роль в решении использовать выделенное расширение файла для нового синтаксиса, чтобы сохранить ts
обратную совместимость файлов.
(
где тег JSX не может появиться, поэтому нет двусмысленности.Это своего рода соглашение, которое нужно использовать
x
в конце, когда ваш JavaScript находится вJSX Harmony
режиме. То есть, когда это действительно:Однако расширение вашего файла на самом деле не имеет значения, если ваши препроцессоры знают о вашем решении (просмотр или веб-пакет). Я, например, использую
.js
весь свой JavaScript, даже если это React. То же относится к машинописи,ts/tsx
.РЕДАКТИРОВАТЬ
Теперь я настоятельно рекомендую использовать JSX для Javascript с синтаксисом React и TSX для TypeScript с React, потому что большинство редакторов / IDE будут использовать расширение для включения или выключения синтаксиса React. Его также считают более выразительным.
источник
ts
иtsx
. В TypeScript компилятор разрешает только синтаксис JSX в.tsx
файлах, поскольку синтаксис создает некоторую неоднозначность с синтаксисом TS (например,<>
синтаксис утверждения), для решения этой проблемы компилятор делает различные предположения вtsx
файле, а не вts
файле. См. Ответ Тициана Черникова-Драгомира.Причина, по которой было введено расширение .jsx, заключается в том, что JSX является расширением синтаксиса JS и, следовательно, файлы .jsx не содержат допустимого JavaScript.
TypeScript следует тому же соглашению, вводя расширения .ts и .tsx. Практическое отличие состоит в том, что .tsx не допускает
<Type>
утверждения типа, поскольку синтаксис конфликтует с тегами JSX.as Type
assertions были введены как замена<Type>
и считались предпочтительным выбором из соображений согласованности как в .ts, так и .tsx. Если в файле .tsx используется код из .ts,<Type>
его необходимо исправить.Использование расширения .tsx подразумевает, что модуль связан с React и использует синтаксис JSX. В противном случае расширение может создать ложное впечатление о содержимом модуля и роли в проекте, это аргумент против использования расширения .tsx по умолчанию.
С другой стороны, если файл связан с React и имеет хорошие шансы содержать JSX в какой-то момент, он может с самого начала называться .tsx, чтобы избежать переименования позже.
Например, служебные функции, которые используются вместе с компонентами React, могут включать JSX в любой момент и, таким образом, могут безопасно использовать имена .tsx, в то время как структура кода Redux не должна использовать компоненты React напрямую, может использоваться и тестироваться отдельно от React и может использовать имена .ts.
источник
Я считаю, что с файлами .tsx вы можете использовать весь код JSX (JavaScript XML). В то время как в файле .ts вы можете использовать только машинописный текст.
источник
.ts
файлы имеют<AngleBracket>
синтаксис утверждения типа, который конфликтует с грамматикой JSX. Чтобы не сломать тонну людей, мы используем.tsx
JSX и добавилиfoo as Bar
синтаксис, который разрешен как в файлах, так.ts
и в.tsx
файлах.А другой - as-синтаксис:
Мы можем использовать .ts,
as-syntax
но<string>someValue
это круто!источник