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