คุณสามารถใช้tsx
แทนts
ด้วยความแตกต่างเพียงเล็กน้อย tsx
เห็นได้ชัดว่าอนุญาตให้ใช้jsx
แท็กภายใน typescript แต่สิ่งนี้นำเสนอความคลุมเครือในการแยกวิเคราะห์ที่ทำให้ 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
ตามที่<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
แท็กที่ดีที่สุดของนักพัฒนาซอฟต์แวร์เก็บความประหลาดใจให้น้อยที่สุด
แม้ว่าความคลุมเครือข้างต้น (แม้ว่าอาจจะไม่ใช่รายการทั้งหมด) ก็ไม่ใหญ่นัก แต่ก็อาจมีส่วนสำคัญในการตัดสินใจใช้นามสกุลไฟล์เฉพาะสำหรับไวยากรณ์ใหม่เพื่อให้ts
ไฟล์เข้ากันได้ย้อนหลัง