เปิดตัว 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 เดิม
    • npx tsgo --version
  • ในอนาคตเวอร์ชันเสถียรจะกลับไปแจกจ่ายผ่านแพ็กเกจ 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 มีกำหนดเปิดตัวก่อนหน้านั้นไม่กี่สัปดาห์

ยังไม่มีความคิดเห็น

ยังไม่มีความคิดเห็น