เปิดตัว TypeScript 7.0 Beta - TS เร็วขึ้นราว 10 เท่าด้วยการพอร์ตแบบเนทีฟไปยัง Go
- อิมพลีเมนเทชันเนทีฟใหม่ที่พอร์ตคอมไพเลอร์ TypeScript เดิมไปยัง Go
- แม้จะเป็น “beta” แต่ย้ำว่ามีความเสถียรพอให้ลองใช้ได้ทันทีทั้งในงานประจำวันและ CI
- โค้ดเบสใหม่นี้ไม่ใช่การเขียนใหม่ทั้งหมด (rewrite) แต่เป็นการพอร์ตอิมพลีเมนเทชันเดิมอย่างเป็นระบบ
- ลอจิกการตรวจสอบชนิดข้อมูลมีโครงสร้างเหมือนกับ TypeScript 6.0
- ประสิทธิภาพบางครั้งเร็วกว่า TypeScript 6.0 ราว 10 เท่า
- อาศัยทั้งประสิทธิภาพของโค้ดเนทีฟและการประมวลผลแบบขนานด้วย shared memory
- มีการใช้งานแล้วกับโค้ดเบสขนาดหลายล้าน LOC ทั้งภายในและภายนอก Microsoft
- ทดสอบล่วงหน้าร่วมกับ Bloomberg, Canva, Figma, Google, Linear, Notion, Slack, Vercel และรายอื่น ๆ
- ไม่ใช่แค่ CLI แต่ประสบการณ์ในเอดิเตอร์ก็ถูกปรับให้เบาและเร็วขึ้นด้วย
วิธีใช้งาน
- ตอนนี้ต้องติดตั้งเป็นแพ็กเกจแยก
npm install -D @typescript/native-preview@beta
- รัน
tsgo แทน tsc เดิม
- ในอนาคตเวอร์ชันเสถียรจะกลับไปแจกจ่ายผ่านแพ็กเกจ
typescript และ entrypoint tsc
ใช้งานคู่กับ TypeScript 6.0
- 7.0 Beta ให้มาในรูปแบบ
@typescript/native-preview + tsgo
- สามารถรัน
tsc และ tsgo ควบคู่กันเพื่อเปรียบเทียบได้
- ในเวอร์ชันเสถียร TS7 จะกลับมาใช้ชื่อ
tsc อีกครั้ง
- มีแพ็กเกจ
@typescript/typescript6 สำหรับรองรับ TS6 ด้วย
- เครื่องมือเดิมที่พึ่งพา TypeScript API ยังสามารถตั้งค่าให้ใช้ TS6 API ต่อไปได้ในช่วงนี้
ข้อจำกัดสำคัญ
- 7.0 Beta ใกล้เคียงกับระดับ production-ready แต่ยังไม่มี programmatic API ที่เสถียร
- API ที่เสถียรคาดว่าจะมาเร็วสุดหลัง TypeScript 7.1 หรืออีกไม่กี่เดือนข้างหน้า
- เครื่องมือ/ปลั๊กอินที่พึ่งพา TypeScript API โดยตรงต้องระวังในการย้ายมาใช้
การประมวลผลแบบขนาน
- มีการทำงานแบบขนานในหลายขั้นตอน เช่น parsing, type check และ emit
- เพิ่มออปชัน
--checkers สำหรับปรับจำนวน type check worker
- เพิ่มออปชัน
--builders สำหรับทำให้การ build แบบ project reference ทำงานขนานกัน
- เพิ่มออปชัน
--singleThreaded สำหรับการรันแบบเธรดเดียว
- เห็นผลชัดในโค้ดเบสขนาดใหญ่และโมโนเรโป แต่เมื่อเพิ่มระดับการขนาน การใช้หน่วยความจำก็อาจเพิ่มขึ้นได้
ความเข้ากันได้โดยอิงจาก TypeScript 6.0
- TypeScript 7.0 ตั้งเป้าให้เข้ากันได้กับการตรวจสอบชนิดข้อมูล/พฤติกรรม CLI ของ TypeScript 6.0
- เป้าหมายคือโค้ดที่ clean compile บน TS6 ควรคอมไพล์ได้เหมือนเดิมบน TS7
- อย่างไรก็ตาม ค่าพื้นฐานใหม่ของ TS6 และการจัดการฟีเจอร์ที่ deprecated จะถูกนำมาใช้ด้วย
- การเปลี่ยนค่าเริ่มต้นของ
strict, module, rootDir, types เป็นต้น อาจส่งผลให้โปรเจ็กต์เดิมรู้สึกถึงความแตกต่าง
- โดยเฉพาะการเปลี่ยนแปลงของ
rootDir และ types ควรตรวจสอบเมื่อทำ migration
- โปรเจ็กต์ที่ใช้การตั้งค่า target/module แบบเก่าหรือออปชันที่ deprecated แนะนำให้ผ่านการย้ายมา TS6 ก่อน
การเปลี่ยนแปลงใน JavaScript/JSDoc
- จัดระเบียบการรองรับ JS ใหม่ให้สอดคล้องกับแนวทางวิเคราะห์ไฟล์ TypeScript มากขึ้น
- มีการถอดการรองรับพิเศษบางส่วนของไวยากรณ์แบบ JSDoc/Closure และแพตเทิร์น JS แบบเก่า
- โค้ดเบสที่ใช้ JS + JSDoc ควรตรวจสอบเพิ่มเติม
การรองรับเอดิเตอร์
- มีส่วนขยาย TypeScript Native Preview สำหรับ VS Code
- ใช้พื้นฐานเดียวกับ CLI จึงได้ประโยชน์ด้านประสิทธิภาพในเอดิเตอร์เช่นกัน
- รองรับ auto-import, hover, inlay hints, code lens, JSX linked editing เป็นต้น
- เนื่องจากอิง LSP จึงนำไปใช้กับเอดิเตอร์/เครื่องมือสมัยใหม่อื่น ๆ ได้ง่าย
แผนต่อไป
- เตรียมทำอิมพลีเมนเทชัน
--watch ที่มีประสิทธิภาพมากขึ้น
- มีแผนทำงานด้าน declaration emit parity สำหรับไฟล์ JS
- มีแผนลดช่องว่างของฟีเจอร์ฝั่งเอดิเตอร์
- programmatic API ที่เสถียรจะมาตั้งแต่หลัง TypeScript 7.1 เป็นต้นไป
- ตั้งเป้าออก TypeScript 7.0 เวอร์ชันเสถียรภายในราว 2 เดือน
- RC มีกำหนดเปิดตัวก่อนหน้านั้นไม่กี่สัปดาห์
ยังไม่มีความคิดเห็น