Вы можете использовать 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но ошибка в tsxas <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обратную совместимость файлов.