เปิดตัวพรีวิว TypeScript Native
(devblogs.microsoft.com)- มีการเปิดเผยพรีวิว ‘tsgo’ ของโปรเจกต์ Corsa ที่พอร์ตคอมไพเลอร์ TypeScript ไปเป็นเนทีฟบนพื้นฐาน Go ผ่าน npm
- เป็นประกาศต่อเนื่องจากประเด็น TypeScript เร็วขึ้น 10 เท่า ที่เป็นข่าวในเดือนมีนาคม
- ทำความเร็วได้ มากกว่า 10 เท่าเมื่อเทียบกับ
tscเดิม และ รองรับไฟล์ JS ที่ใช้ JSX และ JSDoc ด้วย - มีการออกส่วนขยาย Native Preview สำหรับ VS Code ด้วย แต่ ความสามารถอย่างการเติมโค้ดอัตโนมัติและการค้นหาการอ้างอิงยังอยู่ระหว่างพัฒนา
- กำลังเตรียมทั้ง Native API ใหม่และ language server ที่อิง LSP พร้อม นำโมดูล Node แบบ Rust ชื่อ libsyncrpc มาใช้
- บางฟีเจอร์ยังไม่ได้พัฒนา และยังมี ความแตกต่างที่ชัดเจนระหว่าง TypeScript 7 (Corsa) กับ 5.8 (Strada) เดิม
ภาพรวมของ TypeScript Native Preview
- มีการเปิดเผยพรีวิวของ โปรเจกต์พอร์ต TypeScript แบบเนทีฟ (Corsa) ที่ประกาศเมื่อเดือนมีนาคม 2025
- เมื่อเทียบกับโค้ดเบสเดิมที่เป็น JavaScript (Strada) แล้ว
tsgoที่เขียนด้วย Go แสดงให้เห็นถึงประสิทธิภาพที่สูงขึ้นกว่า 10 เท่าในโปรเจกต์ขนาดใหญ่ ด้วย การประมวลผลแบบขนานและการใช้ shared memory - ในอนาคต
tsgoมีแผนจะเข้ามาแทนtscแต่ตอนนี้ยังแจกจ่ายเป็นแพ็กเกจ npm แยกต่างหากnpm install -D @typescript/native-preview npx tsgo --project ./src/tsconfig.json
ความสามารถของส่วนขยาย VS Code
-
เปิดตัวส่วนขยาย “TypeScript (Native Preview)” สำหรับ VS Code
-
หลังติดตั้งแล้วต้องเปิดใช้งานผ่าน Command Palette หรือการตั้งค่า
"typescript.experimental.useTsgo": true -
ตอนนี้ยังพึ่งพาส่วนขยายเดิมอยู่และความสามารถยังจำกัด แต่มีแผนปรับปรุงอย่างต่อเนื่อง
รอบการออกรีลีสและโรดแมปการพัฒนา
- พรีวิวนี้มีแผนจะพัฒนาไปเป็น TypeScript 7 เวอร์ชันทางการ ในอนาคต
- แจกจ่ายในรูปแบบ Nightly build และอัปเดตอัตโนมัติ
- สถานะฟีเจอร์ที่ยังไม่รองรับบางส่วน:
--build,--declaration, การ emit สำหรับ target ระดับล่าง- ฟีเจอร์ฝั่ง editor: การเติมโค้ดอัตโนมัติ, ค้นหาการอ้างอิง, เปลี่ยนชื่อ เป็นต้น
อัปเดตสำคัญ
ความสมบูรณ์ของการตรวจสอบชนิดดีขึ้น
- มีการพอร์ตฟังก์ชันตรวจสอบชนิดเกือบทั้งหมดเสร็จแล้ว
- เริ่มรองรับ การตรวจสอบชนิดของ JSX และ JavaScript + JSDoc แล้ว
- เนื่องจากมีการเปลี่ยนแปลงที่ตั้งใจไว้บางส่วนและความต่างของ
lib.d.tsข้อผิดพลาดที่ได้อาจแตกต่างกัน
รองรับการตรวจสอบชนิดของ JSX
- เดิม JSX ทำได้เพียงการ parse ในช่วงแรก แต่ ตอนนี้รองรับการตรวจสอบชนิดอย่างสมบูรณ์แล้ว
- ตัวอย่าง: ในโปรเจกต์ Sentry
tscใช้เวลา 72 วินาที ขณะที่tsgoใช้ 6.7 วินาที จึง เร็วขึ้นมากกว่า 10 เท่าtsgo -p . --noEmit --extendedDiagnostics
การตรวจสอบชนิดของไฟล์ JavaScript
- ความสามารถในการวิเคราะห์ไฟล์ JS จาก JSDoc ก็ถูกนำมาเขียนใหม่ในโค้ดเนทีฟเช่นกัน
- มีการรีแฟกเตอร์ให้เป็นแนวทางที่ ทันสมัยและสม่ำเสมอมากขึ้น กว่าวิธีเดิม
- แพตเทิร์นแบบเก่าบางอย่างอาจไม่ถูกจดจำอีกต่อไป
ฟีเจอร์ฝั่ง editor (อิง LSP)
- กำลังเขียนใหม่จาก TSServer เดิมไปเป็น language server ที่อิง LSP
- ในเวอร์ชันแรกมีฟีเจอร์ แสดงข้อผิดพลาด, ไปยังคำนิยาม, hover
- ล่าสุดมีการเพิ่มฟีเจอร์ completion แล้วด้วย
สถานะการพัฒนา API
- กำลังพัฒนา ชั้น API ที่อิง IPC
- ทำให้ภาษาโปรแกรมต่าง ๆ สามารถสื่อสารกับโปรเซส TypeScript ได้
- เพื่อติดต่อสื่อสารแบบ synchronous จาก Node.js มีการนำโมดูล Rust libsyncrpc มาใช้
- การออกแบบ API ยังอยู่ในระยะเริ่มต้นและกำลังเปิดรับฟีดแบ็ก
ความแตกต่างจาก TypeScript เดิม
-
จากความต่างของการตั้งค่าบางอย่าง อาจเกิดข้อผิดพลาดในโปรเจกต์เดิมได้:
- ตัวอย่าง:
--moduleResolution: node→ แนะนำให้ใช้bundlerหรือnodenext{ "compilerOptions": { "module": "preserve", "moduleResolution": "bundler" } }
- ตัวอย่าง:
-
ความแตกต่างอื่น ๆ:
- JSX emit ทำได้เพียงเก็บไว้ตามเดิม
- ยังไม่รองรับ declaration emit
- ยังไม่รองรับ
--build - language service ที่เกี่ยวข้องกับ project references ยังไม่สมบูรณ์
แผนถัดไป
- ตั้งเป้าพัฒนา
--buildและฟีเจอร์ editor หลักส่วนใหญ่ให้เสร็จภายในสิ้นปีนี้ - ความคืบหน้าการพัฒนาจะมีการอัปเดตอย่างต่อเนื่องผ่านบล็อกและ nightly release
3 ความคิดเห็น
ผมคอมไพล์
lspเองแล้วใช้งานอยู่ พอเปลี่ยนเป็น Go ก็รู้สึกได้ชัดเลยว่าการใช้ทรัพยากรลดลงช่วงนี้แค่ย้าย js ไป rust / go เพื่อเพิ่มประสิทธิภาพก็กำลังเป็นกระแสนิยม
ตอนรีแฟกเตอร์บ่อย ๆ มีหลายครั้งที่การพาร์สโค้ดฝั่ง
tsserverช้าจนทั้งเอดิเตอร์ค้างไปเลย หวังว่าจะออกมาเร็ว ๆ เพื่อจะได้หลุดพ้นจากความทรมานนี้สักที