Bạn có thể sử dụng tsx
thay thế ts
với rất ít sự khác biệt. tsx
rõ ràng là cho phép sử dụng các jsx
thẻ bên trong bảng chữ, nhưng điều này dẫn đến một số mơ hồ về phân tích cú pháp khiến tsx hơi khác một chút. Theo kinh nghiệm của tôi, những khác biệt này không lớn lắm:
<>
Nhập các xác nhận không hoạt động vì đó là điểm đánh dấu cho thẻ jsx.
Typecript có hai cú pháp cho các xác nhận kiểu. Cả hai đều làm điều tương tự nhưng một cái có thể sử dụng được trong tsx cái kia thì không:
let a: any;
let s = a as string // ok in tsx and ts
let s2 = <string>a // only valid in ts
Tôi cũng sẽ sử dụng as
thay vì <>
trong ts
các tệp để nhất quán. as
thực sự đã được giới thiệu trong Typecript vì <>
không thể sử dụng được trongtsx
Các hàm mũi tên chung không có ràng buộc không được phân tích cú pháp chính xác
Mũi tên chức năng bên dưới là ok trong ts
nhưng một lỗi trong tsx
khi <T>
được hiểu như là sự khởi đầu của một thẻ trongtsx
const fn = <T>(a: T) => a
Bạn có thể giải quyết vấn đề này bằng cách thêm một ràng buộc hoặc không sử dụng hàm mũi tên:
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;}
Ghi chú
Mặc dù bạn có thể sử dụng tsx thay vì ts, nhưng tôi khuyên bạn không nên sử dụng nó. Công ước là một điều mạnh mẽ, người ta liên tưởng tsx
với jsx
và có lẽ sẽ ngạc nhiên bạn không có bất kỳ jsx
thẻ, tốt nhất nhà phát triển giữ sự ngạc nhiên đến mức tối thiểu.
Mặc dù những mơ hồ ở trên (mặc dù có lẽ không phải là danh sách đầy đủ) không lớn nhưng có lẽ chúng đã đóng một vai trò quan trọng trong quyết định sử dụng phần mở rộng tệp chuyên dụng cho cú pháp mới để giữ cho ts
tệp tương thích ngược.